// export side_nature , side_player , side_rus , side_arab , side_rus2 ; export group_Heike , group_Pows , group_Resines , group_Apes , group_Vehicles , group_ConUnits , group_PowsInDep ; export patrol_Units , patrol_Way ; export diff_ResSols_count , diff_ResVehMain_weapon , diff_ResVeh_weapon , diff_ApesCount , diff_ApesAgressivity , diff_RuSols_skill , diff_RuMecs_skill , diff_ConSolsCount , diff_PtUnits_count ; export crates_pos , crates_amount , crates_time ; export Heike , Harwood , Rozier , Sawyer , Vonberg , Messer , Horwitz , Bowl , Resines ; export ApesKilled , ApesKilledMax ; export EngineerNotFound , SeeRiver , SeeFord ; export ResAtPos ; export ResVehicle ; export MissionTime ; export losses , losses_max ; export PowsSaved ; export hovercraft_count ; export SolPow_researched , SolEng_researched ; export EDITOR ; starting begin Init_VariablesAndConstants ( ) ;
   0: CALL 45 0 0
// Init_SidesAndAttitudes ( ) ;
   4: CALL 270 0 0
// Init_Difficulty ( ) ;
   8: CALL 505 0 0
// Init_Characters ( ) ;
  12: CALL 785 0 0
// InitUc ( ) ;
  16: CALL_OW 18
// InitHc ( ) ;
  20: CALL_OW 19
// InitVc ( ) ;
  24: CALL_OW 20
// ApesOnTheMap ( ) ;
  28: CALL 9040 0 0
// RussiansOnTheMap ( ) ;
  32: CALL 5881 0 0
// ResetFog ( ) ;
  36: CALL_OW 335
// START ( ) ;
  40: CALL 2330 0 0
// end ;
  44: END
// function Init_VariablesAndConstants ( ) ; begin
  45: LD_INT 0
  47: PPUSH
// group_Heike := [ ] ;
  48: LD_ADDR_EXP 6
  52: PUSH
  53: EMPTY
  54: ST_TO_ADDR
// group_Pows := [ ] ;
  55: LD_ADDR_EXP 7
  59: PUSH
  60: EMPTY
  61: ST_TO_ADDR
// group_Resines := [ ] ;
  62: LD_ADDR_EXP 8
  66: PUSH
  67: EMPTY
  68: ST_TO_ADDR
// group_Apes := [ ] ;
  69: LD_ADDR_EXP 9
  73: PUSH
  74: EMPTY
  75: ST_TO_ADDR
// group_Vehicles := [ ] ;
  76: LD_ADDR_EXP 10
  80: PUSH
  81: EMPTY
  82: ST_TO_ADDR
// group_ConUnits := [ ] ;
  83: LD_ADDR_EXP 11
  87: PUSH
  88: EMPTY
  89: ST_TO_ADDR
// group_PowsInDep := [ ] ;
  90: LD_ADDR_EXP 12
  94: PUSH
  95: EMPTY
  96: ST_TO_ADDR
// patrol_Units := [ ] ;
  97: LD_ADDR_EXP 13
 101: PUSH
 102: EMPTY
 103: ST_TO_ADDR
// patrol_Way := [ ] ;
 104: LD_ADDR_EXP 14
 108: PUSH
 109: EMPTY
 110: ST_TO_ADDR
// crates_pos := 0 ;
 111: LD_ADDR_EXP 24
 115: PUSH
 116: LD_INT 0
 118: ST_TO_ADDR
// crates_amount := rand ( 2 , 5 ) ;
 119: LD_ADDR_EXP 25
 123: PUSH
 124: LD_INT 2
 126: PPUSH
 127: LD_INT 5
 129: PPUSH
 130: CALL_OW 12
 134: ST_TO_ADDR
// crates_time := 1 1$0 ;
 135: LD_ADDR_EXP 26
 139: PUSH
 140: LD_INT 2100
 142: ST_TO_ADDR
// ApesKilled := 0 ;
 143: LD_ADDR_EXP 36
 147: PUSH
 148: LD_INT 0
 150: ST_TO_ADDR
// ApesKilledMax := 6 ;
 151: LD_ADDR_EXP 37
 155: PUSH
 156: LD_INT 6
 158: ST_TO_ADDR
// RuNeedHelp := [ ] ;
 159: LD_ADDR_EXP 55
 163: PUSH
 164: EMPTY
 165: ST_TO_ADDR
// EngineerNotFound := true ;
 166: LD_ADDR_EXP 38
 170: PUSH
 171: LD_INT 1
 173: ST_TO_ADDR
// SeeRiver := false ;
 174: LD_ADDR_EXP 39
 178: PUSH
 179: LD_INT 0
 181: ST_TO_ADDR
// SeeFord := false ;
 182: LD_ADDR_EXP 40
 186: PUSH
 187: LD_INT 0
 189: ST_TO_ADDR
// ResAtPos := false ;
 190: LD_ADDR_EXP 41
 194: PUSH
 195: LD_INT 0
 197: ST_TO_ADDR
// MissionTime := 0 0$0 ;
 198: LD_ADDR_EXP 43
 202: PUSH
 203: LD_INT 0
 205: ST_TO_ADDR
// losses := 0 ;
 206: LD_ADDR_EXP 44
 210: PUSH
 211: LD_INT 0
 213: ST_TO_ADDR
// losses_max := 0 ;
 214: LD_ADDR_EXP 45
 218: PUSH
 219: LD_INT 0
 221: ST_TO_ADDR
// PowsSaved := false ;
 222: LD_ADDR_EXP 46
 226: PUSH
 227: LD_INT 0
 229: ST_TO_ADDR
// hovercraft_count := 0 ;
 230: LD_ADDR_EXP 47
 234: PUSH
 235: LD_INT 0
 237: ST_TO_ADDR
// SolPow_researched := false ;
 238: LD_ADDR_EXP 48
 242: PUSH
 243: LD_INT 0
 245: ST_TO_ADDR
// SolEng_researched := false ;
 246: LD_ADDR_EXP 49
 250: PUSH
 251: LD_INT 0
 253: ST_TO_ADDR
// enable ( 001 ) ;
 254: LD_INT 1
 256: ENABLE_MARKED
// EDITOR := true ;
 257: LD_ADDR_EXP 50
 261: PUSH
 262: LD_INT 1
 264: ST_TO_ADDR
// end ;
 265: LD_VAR 0 1
 269: RET
// function Init_SidesAndAttitudes ( ) ; var side ; begin
 270: LD_INT 0
 272: PPUSH
 273: PPUSH
// side_nature = 0 ;
 274: LD_ADDR_EXP 1
 278: PUSH
 279: LD_INT 0
 281: ST_TO_ADDR
// side_player = 2 ;
 282: LD_ADDR_EXP 2
 286: PUSH
 287: LD_INT 2
 289: ST_TO_ADDR
// side_rus = 3 ;
 290: LD_ADDR_EXP 3
 294: PUSH
 295: LD_INT 3
 297: ST_TO_ADDR
// side_arab = 5 ;
 298: LD_ADDR_EXP 4
 302: PUSH
 303: LD_INT 5
 305: ST_TO_ADDR
// side_rus2 = 6 ;
 306: LD_ADDR_EXP 5
 310: PUSH
 311: LD_INT 6
 313: ST_TO_ADDR
// SetAttitude ( side_player , side_rus , att_enemy , true ) ;
 314: LD_EXP 2
 318: PPUSH
 319: LD_EXP 3
 323: PPUSH
 324: LD_INT 2
 326: PPUSH
 327: LD_INT 1
 329: PPUSH
 330: CALL_OW 80
// SetAttitude ( side_player , side_arab , att_friend , true ) ;
 334: LD_EXP 2
 338: PPUSH
 339: LD_EXP 4
 343: PPUSH
 344: LD_INT 1
 346: PPUSH
 347: LD_INT 1
 349: PPUSH
 350: CALL_OW 80
// SetAttitude ( side_rus , side_arab , att_enemy , true ) ;
 354: LD_EXP 3
 358: PPUSH
 359: LD_EXP 4
 363: PPUSH
 364: LD_INT 2
 366: PPUSH
 367: LD_INT 1
 369: PPUSH
 370: CALL_OW 80
// SetAttitude ( side_rus2 , side_rus , att_neutral , true ) ;
 374: LD_EXP 5
 378: PPUSH
 379: LD_EXP 3
 383: PPUSH
 384: LD_INT 0
 386: PPUSH
 387: LD_INT 1
 389: PPUSH
 390: CALL_OW 80
// SetAttitude ( side_rus2 , side_player , att_friend , true ) ;
 394: LD_EXP 5
 398: PPUSH
 399: LD_EXP 2
 403: PPUSH
 404: LD_INT 1
 406: PPUSH
 407: LD_INT 1
 409: PPUSH
 410: CALL_OW 80
// SetAttitude ( side_rus2 , side_arab , att_friend , true ) ;
 414: LD_EXP 5
 418: PPUSH
 419: LD_EXP 4
 423: PPUSH
 424: LD_INT 1
 426: PPUSH
 427: LD_INT 1
 429: PPUSH
 430: CALL_OW 80
// for side in [ side_player , side_rus , side_arab ] do
 434: LD_ADDR_VAR 0 2
 438: PUSH
 439: LD_EXP 2
 443: PUSH
 444: LD_EXP 3
 448: PUSH
 449: LD_EXP 4
 453: PUSH
 454: EMPTY
 455: LIST
 456: LIST
 457: LIST
 458: PUSH
 459: FOR_IN
 460: IFFALSE 484
// SetAttitude ( side , side_nature , att_neutral , true ) ;
 462: LD_VAR 0 2
 466: PPUSH
 467: LD_EXP 1
 471: PPUSH
 472: LD_INT 0
 474: PPUSH
 475: LD_INT 1
 477: PPUSH
 478: CALL_OW 80
 482: GO 459
 484: POP
 485: POP
// ChangeSideFog ( side_player , side_arab ) ;
 486: LD_EXP 2
 490: PPUSH
 491: LD_EXP 4
 495: PPUSH
 496: CALL_OW 343
// end ;
 500: LD_VAR 0 1
 504: RET
// function Init_Difficulty ( ) ; begin
 505: LD_INT 0
 507: PPUSH
// diff_ResSols_count := [ 2 , 2 , 3 ] [ Difficulty ] ;
 508: LD_ADDR_EXP 15
 512: PUSH
 513: LD_INT 2
 515: PUSH
 516: LD_INT 2
 518: PUSH
 519: LD_INT 3
 521: PUSH
 522: EMPTY
 523: LIST
 524: LIST
 525: LIST
 526: PUSH
 527: LD_OWVAR 67
 531: ARRAY
 532: ST_TO_ADDR
// diff_ResVehMain_weapon := [ ar_double_machine_gun , ar_double_machine_gun , ar_gatling_gun ] [ Difficulty ] ;
 533: LD_ADDR_EXP 16
 537: PUSH
 538: LD_INT 24
 540: PUSH
 541: LD_INT 24
 543: PUSH
 544: LD_INT 25
 546: PUSH
 547: EMPTY
 548: LIST
 549: LIST
 550: LIST
 551: PUSH
 552: LD_OWVAR 67
 556: ARRAY
 557: ST_TO_ADDR
// diff_ResVeh_weapon := [ ar_double_machine_gun , ar_double_machine_gun , [ ] ] [ Difficulty ] ;
 558: LD_ADDR_EXP 17
 562: PUSH
 563: LD_INT 24
 565: PUSH
 566: LD_INT 24
 568: PUSH
 569: EMPTY
 570: PUSH
 571: EMPTY
 572: LIST
 573: LIST
 574: LIST
 575: PUSH
 576: LD_OWVAR 67
 580: ARRAY
 581: ST_TO_ADDR
// diff_ApesCount := [ 4 , 5 , 6 ] [ Difficulty ] ;
 582: LD_ADDR_EXP 18
 586: PUSH
 587: LD_INT 4
 589: PUSH
 590: LD_INT 5
 592: PUSH
 593: LD_INT 6
 595: PUSH
 596: EMPTY
 597: LIST
 598: LIST
 599: LIST
 600: PUSH
 601: LD_OWVAR 67
 605: ARRAY
 606: ST_TO_ADDR
// diff_ApesAgressivity := [ 15 , 20 , 30 ] [ Difficulty ] ;
 607: LD_ADDR_EXP 19
 611: PUSH
 612: LD_INT 15
 614: PUSH
 615: LD_INT 20
 617: PUSH
 618: LD_INT 30
 620: PUSH
 621: EMPTY
 622: LIST
 623: LIST
 624: LIST
 625: PUSH
 626: LD_OWVAR 67
 630: ARRAY
 631: ST_TO_ADDR
// diff_RuSols_skill := [ rand ( 1 , 3 ) , rand ( 2 , 3 ) , rand ( 2 , 4 ) ] [ Difficulty ] ;
 632: LD_ADDR_EXP 20
 636: PUSH
 637: LD_INT 1
 639: PPUSH
 640: LD_INT 3
 642: PPUSH
 643: CALL_OW 12
 647: PUSH
 648: LD_INT 2
 650: PPUSH
 651: LD_INT 3
 653: PPUSH
 654: CALL_OW 12
 658: PUSH
 659: LD_INT 2
 661: PPUSH
 662: LD_INT 4
 664: PPUSH
 665: CALL_OW 12
 669: PUSH
 670: EMPTY
 671: LIST
 672: LIST
 673: LIST
 674: PUSH
 675: LD_OWVAR 67
 679: ARRAY
 680: ST_TO_ADDR
// diff_RuMecs_skill := [ rand ( 1 , 2 ) , rand ( 1 , 3 ) , rand ( 2 , 3 ) ] [ Difficulty ] ;
 681: LD_ADDR_EXP 21
 685: PUSH
 686: LD_INT 1
 688: PPUSH
 689: LD_INT 2
 691: PPUSH
 692: CALL_OW 12
 696: PUSH
 697: LD_INT 1
 699: PPUSH
 700: LD_INT 3
 702: PPUSH
 703: CALL_OW 12
 707: PUSH
 708: LD_INT 2
 710: PPUSH
 711: LD_INT 3
 713: PPUSH
 714: CALL_OW 12
 718: PUSH
 719: EMPTY
 720: LIST
 721: LIST
 722: LIST
 723: PUSH
 724: LD_OWVAR 67
 728: ARRAY
 729: ST_TO_ADDR
// diff_ConSolsCount := [ 3 , 2 , 3 ] [ Difficulty ] ;
 730: LD_ADDR_EXP 22
 734: PUSH
 735: LD_INT 3
 737: PUSH
 738: LD_INT 2
 740: PUSH
 741: LD_INT 3
 743: PUSH
 744: EMPTY
 745: LIST
 746: LIST
 747: LIST
 748: PUSH
 749: LD_OWVAR 67
 753: ARRAY
 754: ST_TO_ADDR
// diff_PtUnits_count := [ 2 , 3 , 3 ] [ Difficulty ] ;
 755: LD_ADDR_EXP 23
 759: PUSH
 760: LD_INT 2
 762: PUSH
 763: LD_INT 3
 765: PUSH
 766: LD_INT 3
 768: PUSH
 769: EMPTY
 770: LIST
 771: LIST
 772: LIST
 773: PUSH
 774: LD_OWVAR 67
 778: ARRAY
 779: ST_TO_ADDR
// end ;
 780: LD_VAR 0 1
 784: RET
// function Init_Characters ( ) ; var i , un ; begin
 785: LD_INT 0
 787: PPUSH
 788: PPUSH
 789: PPUSH
// uc_side := side_player ;
 790: LD_ADDR_OWVAR 20
 794: PUSH
 795: LD_EXP 2
 799: ST_TO_ADDR
// if editor then
 800: LD_EXP 50
 804: IFFALSE 916
// begin Heike := ImportCharacter ( Heike , Heike ) ;
 806: LD_ADDR_EXP 27
 810: PUSH
 811: LD_STRING Heike
 813: PPUSH
 814: LD_EXP 27
 818: PPUSH
 819: CALL 7434 0 2
 823: ST_TO_ADDR
// Harwood := ImportCharacter ( Harwood , Harwood ) ;
 824: LD_ADDR_EXP 28
 828: PUSH
 829: LD_STRING Harwood
 831: PPUSH
 832: LD_EXP 28
 836: PPUSH
 837: CALL 7434 0 2
 841: ST_TO_ADDR
// Rozier := ImportCharacter ( Rozier , Rozier ) ;
 842: LD_ADDR_EXP 29
 846: PUSH
 847: LD_STRING Rozier
 849: PPUSH
 850: LD_EXP 29
 854: PPUSH
 855: CALL 7434 0 2
 859: ST_TO_ADDR
// Sawyer := ImportCharacter ( Sawyer , Sawyer ) ;
 860: LD_ADDR_EXP 30
 864: PUSH
 865: LD_STRING Sawyer
 867: PPUSH
 868: LD_EXP 30
 872: PPUSH
 873: CALL 7434 0 2
 877: ST_TO_ADDR
// Vonberg := ImportCharacter ( Vonberg , Vonberg ) ;
 878: LD_ADDR_EXP 31
 882: PUSH
 883: LD_STRING Vonberg
 885: PPUSH
 886: LD_EXP 31
 890: PPUSH
 891: CALL 7434 0 2
 895: ST_TO_ADDR
// Messer := ImportCharacter ( Messer , Messer ) ;
 896: LD_ADDR_EXP 32
 900: PUSH
 901: LD_STRING Messer
 903: PPUSH
 904: LD_EXP 32
 908: PPUSH
 909: CALL 7434 0 2
 913: ST_TO_ADDR
// end else
 914: GO 994
// begin Heike := CreateCharacter ( Heike ) ;
 916: LD_ADDR_EXP 27
 920: PUSH
 921: LD_STRING Heike
 923: PPUSH
 924: CALL_OW 34
 928: ST_TO_ADDR
// Harwood := CreateCharacter ( Harwood ) ;
 929: LD_ADDR_EXP 28
 933: PUSH
 934: LD_STRING Harwood
 936: PPUSH
 937: CALL_OW 34
 941: ST_TO_ADDR
// Rozier := CreateCharacter ( Rozier ) ;
 942: LD_ADDR_EXP 29
 946: PUSH
 947: LD_STRING Rozier
 949: PPUSH
 950: CALL_OW 34
 954: ST_TO_ADDR
// Sawyer := CreateCharacter ( Sawyer ) ;
 955: LD_ADDR_EXP 30
 959: PUSH
 960: LD_STRING Sawyer
 962: PPUSH
 963: CALL_OW 34
 967: ST_TO_ADDR
// Vonberg := CreateCharacter ( Vonberg ) ;
 968: LD_ADDR_EXP 31
 972: PUSH
 973: LD_STRING Vonberg
 975: PPUSH
 976: CALL_OW 34
 980: ST_TO_ADDR
// Messer := CreateCharacter ( Messer ) ;
 981: LD_ADDR_EXP 32
 985: PUSH
 986: LD_STRING Messer
 988: PPUSH
 989: CALL_OW 34
 993: ST_TO_ADDR
// end ; for un in [ Heike , Harwood , Rozier , Sawyer , Vonberg , Messer ] do
 994: LD_ADDR_VAR 0 3
 998: PUSH
 999: LD_EXP 27
1003: PUSH
1004: LD_EXP 28
1008: PUSH
1009: LD_EXP 29
1013: PUSH
1014: LD_EXP 30
1018: PUSH
1019: LD_EXP 31
1023: PUSH
1024: LD_EXP 32
1028: PUSH
1029: EMPTY
1030: LIST
1031: LIST
1032: LIST
1033: LIST
1034: LIST
1035: LIST
1036: PUSH
1037: FOR_IN
1038: IFFALSE 1109
// begin if un <> 0 then
1040: LD_VAR 0 3
1044: PUSH
1045: LD_INT 0
1047: NONEQUAL
1048: IFFALSE 1107
// begin group_Heike := group_Heike ^ [ un ] ;
1050: LD_ADDR_EXP 6
1054: PUSH
1055: LD_EXP 6
1059: PUSH
1060: LD_VAR 0 3
1064: PUSH
1065: EMPTY
1066: LIST
1067: ADD
1068: ST_TO_ADDR
// PlaceUnitArea ( un , _PlayerEnter , false ) ;
1069: LD_VAR 0 3
1073: PPUSH
1074: LD_INT 1
1076: PPUSH
1077: LD_INT 0
1079: PPUSH
1080: CALL_OW 49
// if GetClass ( un ) = class_engineer then
1084: LD_VAR 0 3
1088: PPUSH
1089: CALL_OW 257
1093: PUSH
1094: LD_INT 2
1096: EQUAL
1097: IFFALSE 1107
// EngineerNotFound := false ;
1099: LD_ADDR_EXP 38
1103: PUSH
1104: LD_INT 0
1106: ST_TO_ADDR
// end ; end ;
1107: GO 1037
1109: POP
1110: POP
// if EngineerNotFound then
1111: LD_EXP 38
1115: IFFALSE 1129
// SetClass ( Heike , class_engineer ) ;
1117: LD_EXP 27
1121: PPUSH
1122: LD_INT 2
1124: PPUSH
1125: CALL_OW 336
// losses_max := group_Heike - 2 ;
1129: LD_ADDR_EXP 45
1133: PUSH
1134: LD_EXP 6
1138: PUSH
1139: LD_INT 2
1141: MINUS
1142: ST_TO_ADDR
// group_Vehicles := LoadVariable ( Cars_m01_cont , [ [ 21 , 1 , 1 , ru_heavy_machine_gun , 3 ] , [ 21 , 1 , 1 , ru_gatling_gun , 3 ] , [ 21 , 1 , 1 , ru_heavy_machine_gun , 3 ] ] ) ;
1143: LD_ADDR_EXP 10
1147: PUSH
1148: LD_STRING Cars_m01_cont
1150: PPUSH
1151: LD_INT 21
1153: PUSH
1154: LD_INT 1
1156: PUSH
1157: LD_INT 1
1159: PUSH
1160: LD_INT 42
1162: PUSH
1163: LD_INT 3
1165: PUSH
1166: EMPTY
1167: LIST
1168: LIST
1169: LIST
1170: LIST
1171: LIST
1172: PUSH
1173: LD_INT 21
1175: PUSH
1176: LD_INT 1
1178: PUSH
1179: LD_INT 1
1181: PUSH
1182: LD_INT 43
1184: PUSH
1185: LD_INT 3
1187: PUSH
1188: EMPTY
1189: LIST
1190: LIST
1191: LIST
1192: LIST
1193: LIST
1194: PUSH
1195: LD_INT 21
1197: PUSH
1198: LD_INT 1
1200: PUSH
1201: LD_INT 1
1203: PUSH
1204: LD_INT 42
1206: PUSH
1207: LD_INT 3
1209: PUSH
1210: EMPTY
1211: LIST
1212: LIST
1213: LIST
1214: LIST
1215: LIST
1216: PUSH
1217: EMPTY
1218: LIST
1219: LIST
1220: LIST
1221: PPUSH
1222: CALL_OW 30
1226: ST_TO_ADDR
// if group_Vehicles > 2 then
1227: LD_EXP 10
1231: PUSH
1232: LD_INT 2
1234: GREATER
1235: IFFALSE 1248
// begin ImportVehicles ( group_Vehicles ) ;
1237: LD_EXP 10
1241: PPUSH
1242: CALL 7519 0 1
// end else
1246: GO 1257
// ImportVehicles ( group_Vehicles ) ;
1248: LD_EXP 10
1252: PPUSH
1253: CALL 7519 0 1
// uc_side := side_arab ;
1257: LD_ADDR_OWVAR 20
1261: PUSH
1262: LD_EXP 4
1266: ST_TO_ADDR
// uc_nation := nation_arabian ;
1267: LD_ADDR_OWVAR 21
1271: PUSH
1272: LD_INT 2
1274: ST_TO_ADDR
// Horwitz := NewCharacter ( Horwitz ) ;
1275: LD_ADDR_EXP 33
1279: PUSH
1280: LD_STRING Horwitz
1282: PPUSH
1283: CALL_OW 25
1287: ST_TO_ADDR
// Resines := NewCharacter ( Resines ) ;
1288: LD_ADDR_EXP 35
1292: PUSH
1293: LD_STRING Resines
1295: PPUSH
1296: CALL_OW 25
1300: ST_TO_ADDR
// group_Resines := group_Resines ^ Resines ;
1301: LD_ADDR_EXP 8
1305: PUSH
1306: LD_EXP 8
1310: PUSH
1311: LD_EXP 35
1315: ADD
1316: ST_TO_ADDR
// for i := 1 to diff_ResSols_count do
1317: LD_ADDR_VAR 0 2
1321: PUSH
1322: DOUBLE
1323: LD_INT 1
1325: DEC
1326: ST_TO_ADDR
1327: LD_EXP 15
1331: PUSH
1332: FOR_TO
1333: IFFALSE 1376
// begin PrepareSoldier ( RandSex ( 25 ) , rand ( 2 , 3 ) ) ;
1335: LD_INT 25
1337: PPUSH
1338: CALL 7482 0 1
1342: PPUSH
1343: LD_INT 2
1345: PPUSH
1346: LD_INT 3
1348: PPUSH
1349: CALL_OW 12
1353: PPUSH
1354: CALL_OW 381
// group_Resines := group_Resines ^ CreateHuman ( ) ;
1358: LD_ADDR_EXP 8
1362: PUSH
1363: LD_EXP 8
1367: PUSH
1368: CALL_OW 44
1372: ADD
1373: ST_TO_ADDR
// end ;
1374: GO 1332
1376: POP
1377: POP
// InitVc ( ) ;
1378: CALL_OW 20
// vc_chassis := ar_medium_trike ;
1382: LD_ADDR_OWVAR 37
1386: PUSH
1387: LD_INT 13
1389: ST_TO_ADDR
// vc_control := control_manual ;
1390: LD_ADDR_OWVAR 38
1394: PUSH
1395: LD_INT 1
1397: ST_TO_ADDR
// vc_engine := engine_combustion ;
1398: LD_ADDR_OWVAR 39
1402: PUSH
1403: LD_INT 1
1405: ST_TO_ADDR
// vc_weapon := diff_ResVehMain_weapon ;
1406: LD_ADDR_OWVAR 40
1410: PUSH
1411: LD_EXP 16
1415: ST_TO_ADDR
// ResVehicle := CreateVehicle ( ) ;
1416: LD_ADDR_EXP 42
1420: PUSH
1421: CALL_OW 45
1425: ST_TO_ADDR
// group_Resines := group_Resines ^ ResVehicle ;
1426: LD_ADDR_EXP 8
1430: PUSH
1431: LD_EXP 8
1435: PUSH
1436: LD_EXP 42
1440: ADD
1441: ST_TO_ADDR
// if Difficulty <> 3 then
1442: LD_OWVAR 67
1446: PUSH
1447: LD_INT 3
1449: NONEQUAL
1450: IFFALSE 1533
// begin uc_nation := nation_arabian ;
1452: LD_ADDR_OWVAR 21
1456: PUSH
1457: LD_INT 2
1459: ST_TO_ADDR
// vc_chassis := ar_medium_trike ;
1460: LD_ADDR_OWVAR 37
1464: PUSH
1465: LD_INT 13
1467: ST_TO_ADDR
// vc_engine := engine_combustion ;
1468: LD_ADDR_OWVAR 39
1472: PUSH
1473: LD_INT 1
1475: ST_TO_ADDR
// vc_weapon := diff_ResVeh_weapon ;
1476: LD_ADDR_OWVAR 40
1480: PUSH
1481: LD_EXP 17
1485: ST_TO_ADDR
// group_Resines := group_Resines ^ CreateVehicle ( ) ;
1486: LD_ADDR_EXP 8
1490: PUSH
1491: LD_EXP 8
1495: PUSH
1496: CALL_OW 45
1500: ADD
1501: ST_TO_ADDR
// PrepareMechanic ( RandSex ( 20 ) , 2 ) ;
1502: LD_INT 20
1504: PPUSH
1505: CALL 7482 0 1
1509: PPUSH
1510: LD_INT 2
1512: PPUSH
1513: CALL_OW 383
// group_Resines := group_Resines ^ CreateHuman ( ) ;
1517: LD_ADDR_EXP 8
1521: PUSH
1522: LD_EXP 8
1526: PUSH
1527: CALL_OW 44
1531: ADD
1532: ST_TO_ADDR
// end ; uc_side := side_rus2 ;
1533: LD_ADDR_OWVAR 20
1537: PUSH
1538: LD_EXP 5
1542: ST_TO_ADDR
// Bowl := NewCharacter ( Bowl ) ;
1543: LD_ADDR_EXP 34
1547: PUSH
1548: LD_STRING Bowl
1550: PPUSH
1551: CALL_OW 25
1555: ST_TO_ADDR
// group_Pows := group_Pows union Bowl ;
1556: LD_ADDR_EXP 7
1560: PUSH
1561: LD_EXP 7
1565: PUSH
1566: LD_EXP 34
1570: UNION
1571: ST_TO_ADDR
// uc_nation := nation_arabian ;
1572: LD_ADDR_OWVAR 21
1576: PUSH
1577: LD_INT 2
1579: ST_TO_ADDR
// InItHc ( ) ;
1580: CALL_OW 19
// if group_Heike < 5 then
1584: LD_EXP 6
1588: PUSH
1589: LD_INT 5
1591: LESS
1592: IFFALSE 1706
// begin for i := 1 to 2 do
1594: LD_ADDR_VAR 0 2
1598: PUSH
1599: DOUBLE
1600: LD_INT 1
1602: DEC
1603: ST_TO_ADDR
1604: LD_INT 2
1606: PUSH
1607: FOR_TO
1608: IFFALSE 1702
// begin PrepareHuman ( RandSex ( 50 ) , rand ( 1 , 4 ) , rand ( 1 , 2 ) ) ;
1610: LD_INT 50
1612: PPUSH
1613: CALL 7482 0 1
1617: PPUSH
1618: LD_INT 1
1620: PPUSH
1621: LD_INT 4
1623: PPUSH
1624: CALL_OW 12
1628: PPUSH
1629: LD_INT 1
1631: PPUSH
1632: LD_INT 2
1634: PPUSH
1635: CALL_OW 12
1639: PPUSH
1640: CALL_OW 380
// un := CreateHuman ( ) ;
1644: LD_ADDR_VAR 0 3
1648: PUSH
1649: CALL_OW 44
1653: ST_TO_ADDR
// if GetClass ( un ) = class_soldier then
1654: LD_VAR 0 3
1658: PPUSH
1659: CALL_OW 257
1663: PUSH
1664: LD_INT 1
1666: EQUAL
1667: IFFALSE 1681
// SetClass ( un , class_engineer ) ;
1669: LD_VAR 0 3
1673: PPUSH
1674: LD_INT 2
1676: PPUSH
1677: CALL_OW 336
// group_Pows := group_Pows ^ [ un ] ;
1681: LD_ADDR_EXP 7
1685: PUSH
1686: LD_EXP 7
1690: PUSH
1691: LD_VAR 0 3
1695: PUSH
1696: EMPTY
1697: LIST
1698: ADD
1699: ST_TO_ADDR
// end ;
1700: GO 1607
1702: POP
1703: POP
// end else
1704: GO 1737
// begin PrepareMechanic ( RandSex ( 50 ) , 2 ) ;
1706: LD_INT 50
1708: PPUSH
1709: CALL 7482 0 1
1713: PPUSH
1714: LD_INT 2
1716: PPUSH
1717: CALL_OW 383
// group_Pows := group_Pows ^ CreateHuman ( ) ;
1721: LD_ADDR_EXP 7
1725: PUSH
1726: LD_EXP 7
1730: PUSH
1731: CALL_OW 44
1735: ADD
1736: ST_TO_ADDR
// end ; end ;
1737: LD_VAR 0 1
1741: RET
// every 3 3$0 do var time , engs ;
1742: GO 1744
1744: DISABLE
1745: LD_INT 0
1747: PPUSH
1748: PPUSH
// begin time := [ 0 0$30 , 0 0$55 , 1 1$20 , 2 2$05 ] [ rand ( 1 , 4 ) ] ;
1749: LD_ADDR_VAR 0 1
1753: PUSH
1754: LD_INT 1050
1756: PUSH
1757: LD_INT 1925
1759: PUSH
1760: LD_INT 2800
1762: PUSH
1763: LD_INT 4375
1765: PUSH
1766: EMPTY
1767: LIST
1768: LIST
1769: LIST
1770: LIST
1771: PUSH
1772: LD_INT 1
1774: PPUSH
1775: LD_INT 4
1777: PPUSH
1778: CALL_OW 12
1782: ARRAY
1783: ST_TO_ADDR
// engs := FilterAllUnits ( [ [ [ f_side , side_rus ] , [ f_class , class_engineer ] , [ f_alive ] ] ] ) ;
1784: LD_ADDR_VAR 0 2
1788: PUSH
1789: LD_INT 22
1791: PUSH
1792: LD_EXP 3
1796: PUSH
1797: EMPTY
1798: LIST
1799: LIST
1800: PUSH
1801: LD_INT 25
1803: PUSH
1804: LD_INT 2
1806: PUSH
1807: EMPTY
1808: LIST
1809: LIST
1810: PUSH
1811: LD_INT 51
1813: PUSH
1814: EMPTY
1815: LIST
1816: PUSH
1817: EMPTY
1818: LIST
1819: LIST
1820: LIST
1821: PUSH
1822: EMPTY
1823: LIST
1824: PPUSH
1825: CALL_OW 69
1829: ST_TO_ADDR
// if not tick >= 25 25$0 then
1830: LD_OWVAR 1
1834: PUSH
1835: LD_INT 52500
1837: GREATEREQUAL
1838: NOT
1839: IFFALSE 1873
// begin wait ( time ) ;
1841: LD_VAR 0 1
1845: PPUSH
1846: CALL_OW 67
// CreateCratesArea ( rand ( 2 , 4 ) , _RuBase , true ) ;
1850: LD_INT 2
1852: PPUSH
1853: LD_INT 4
1855: PPUSH
1856: CALL_OW 12
1860: PPUSH
1861: LD_INT 8
1863: PPUSH
1864: LD_INT 1
1866: PPUSH
1867: CALL_OW 55
// end else
1871: GO 1932
// begin if engs <> 0 then
1873: LD_VAR 0 2
1877: PUSH
1878: LD_INT 0
1880: NONEQUAL
1881: IFFALSE 1898
// wait ( time + 2 2$35 ) else
1883: LD_VAR 0 1
1887: PUSH
1888: LD_INT 5425
1890: PLUS
1891: PPUSH
1892: CALL_OW 67
1896: GO 1911
// wait ( time + 7 7$40 ) ;
1898: LD_VAR 0 1
1902: PUSH
1903: LD_INT 16100
1905: PLUS
1906: PPUSH
1907: CALL_OW 67
// CreateCratesArea ( rand ( 1 , 2 ) , _RuBase , true ) ;
1911: LD_INT 1
1913: PPUSH
1914: LD_INT 2
1916: PPUSH
1917: CALL_OW 12
1921: PPUSH
1922: LD_INT 8
1924: PPUSH
1925: LD_INT 1
1927: PPUSH
1928: CALL_OW 55
// end ; enable ;
1932: ENABLE
// end ;
1933: PPOPN 2
1935: END
// every 0 0$5 do var dep , onLow ;
1936: GO 1938
1938: DISABLE
1939: LD_INT 0
1941: PPUSH
1942: PPUSH
// begin dep := FilterAllUnits ( [ [ [ f_side , side_player ] , [ f_btype , b_depot ] , [ f_nation , nation_arabian ] ] ] ) ;
1943: LD_ADDR_VAR 0 1
1947: PUSH
1948: LD_INT 22
1950: PUSH
1951: LD_EXP 2
1955: PUSH
1956: EMPTY
1957: LIST
1958: LIST
1959: PUSH
1960: LD_INT 30
1962: PUSH
1963: LD_INT 0
1965: PUSH
1966: EMPTY
1967: LIST
1968: LIST
1969: PUSH
1970: LD_INT 23
1972: PUSH
1973: LD_INT 2
1975: PUSH
1976: EMPTY
1977: LIST
1978: LIST
1979: PUSH
1980: EMPTY
1981: LIST
1982: LIST
1983: LIST
1984: PUSH
1985: EMPTY
1986: LIST
1987: PPUSH
1988: CALL_OW 69
1992: ST_TO_ADDR
// onLow := FilterUnitsInArea ( _Lowlands , [ [ f_side , side_player ] , [ f_btype , b_depot ] ] ) ;
1993: LD_ADDR_VAR 0 2
1997: PUSH
1998: LD_INT 14
2000: PPUSH
2001: LD_INT 22
2003: PUSH
2004: LD_EXP 2
2008: PUSH
2009: EMPTY
2010: LIST
2011: LIST
2012: PUSH
2013: LD_INT 30
2015: PUSH
2016: LD_INT 0
2018: PUSH
2019: EMPTY
2020: LIST
2021: LIST
2022: PUSH
2023: EMPTY
2024: LIST
2025: LIST
2026: PPUSH
2027: CALL_OW 70
2031: ST_TO_ADDR
// if dep <> 0 then
2032: LD_VAR 0 1
2036: PUSH
2037: LD_INT 0
2039: NONEQUAL
2040: IFFALSE 2109
// begin if crates_pos <> 2 and onLow = 0 then
2042: LD_EXP 24
2046: PUSH
2047: LD_INT 2
2049: NONEQUAL
2050: PUSH
2051: LD_VAR 0 2
2055: PUSH
2056: LD_INT 0
2058: EQUAL
2059: AND
2060: IFFALSE 2089
// begin crates_pos := 2 ;
2062: LD_ADDR_EXP 24
2066: PUSH
2067: LD_INT 2
2069: ST_TO_ADDR
// wait ( 0 0$3 ) ;
2070: LD_INT 105
2072: PPUSH
2073: CALL_OW 67
// Say ( Heike , DEvent_DepOnHill-Heike-1 ) ;
2077: LD_EXP 27
2081: PPUSH
2082: LD_STRING DEvent_DepOnHill-Heike-1
2084: PPUSH
2085: CALL_OW 88
// end ; if onLow <> 0 then
2089: LD_VAR 0 2
2093: PUSH
2094: LD_INT 0
2096: NONEQUAL
2097: IFFALSE 2107
// crates_pos := 1 ;
2099: LD_ADDR_EXP 24
2103: PUSH
2104: LD_INT 1
2106: ST_TO_ADDR
// end else
2107: GO 2117
// crates_pos := 0 ;
2109: LD_ADDR_EXP 24
2113: PUSH
2114: LD_INT 0
2116: ST_TO_ADDR
// enable ;
2117: ENABLE
// end ;
2118: PPOPN 2
2120: END
// every 0 0$50 do
2121: GO 2123
2123: DISABLE
// begin wait ( crates_time ) ;
2124: LD_EXP 26
2128: PPUSH
2129: CALL_OW 67
// case crates_pos of 0 :
2133: LD_EXP 24
2137: PUSH
2138: LD_INT 0
2140: DOUBLE
2141: EQUAL
2142: IFTRUE 2146
2144: GO 2161
2146: POP
// CreateCratesAnywhere ( crates_Amount , true ) ; 1 :
2147: LD_EXP 25
2151: PPUSH
2152: LD_INT 1
2154: PPUSH
2155: CALL_OW 57
2159: GO 2214
2161: LD_INT 1
2163: DOUBLE
2164: EQUAL
2165: IFTRUE 2169
2167: GO 2187
2169: POP
// CreateCratesArea ( crates_Amount , _Lowland , true ) ; 2 :
2170: LD_EXP 25
2174: PPUSH
2175: LD_INT 15
2177: PPUSH
2178: LD_INT 1
2180: PPUSH
2181: CALL_OW 55
2185: GO 2214
2187: LD_INT 2
2189: DOUBLE
2190: EQUAL
2191: IFTRUE 2195
2193: GO 2213
2195: POP
// CreateCratesArea ( crates_Amount , _Hill , true ) ; end ;
2196: LD_EXP 25
2200: PPUSH
2201: LD_INT 16
2203: PPUSH
2204: LD_INT 1
2206: PPUSH
2207: CALL_OW 55
2211: GO 2214
2213: POP
// case tick of 0 .. 5 5$0 :
2214: LD_OWVAR 1
2218: PUSH
2219: LD_INT 0
2221: DOUBLE
2222: GREATEREQUAL
2223: IFFALSE 2231
2225: LD_INT 10500
2227: DOUBLE
2228: LESSEQUAL
2229: IFTRUE 2233
2231: GO 2244
2233: POP
// crates_time := 0 0$30 ; 5 5$0 .. 8 8$0 :
2234: LD_ADDR_EXP 26
2238: PUSH
2239: LD_INT 1050
2241: ST_TO_ADDR
2242: GO 2328
2244: LD_INT 10500
2246: DOUBLE
2247: GREATEREQUAL
2248: IFFALSE 2256
2250: LD_INT 16800
2252: DOUBLE
2253: LESSEQUAL
2254: IFTRUE 2258
2256: GO 2269
2258: POP
// crates_time := 1 1$00 ; 8 8$0 .. 12 12$0 :
2259: LD_ADDR_EXP 26
2263: PUSH
2264: LD_INT 2100
2266: ST_TO_ADDR
2267: GO 2328
2269: LD_INT 16800
2271: DOUBLE
2272: GREATEREQUAL
2273: IFFALSE 2281
2275: LD_INT 25200
2277: DOUBLE
2278: LESSEQUAL
2279: IFTRUE 2283
2281: GO 2294
2283: POP
// crates_time := 1 1$25 ; 12 12$0 .. 18 18$0 :
2284: LD_ADDR_EXP 26
2288: PUSH
2289: LD_INT 2975
2291: ST_TO_ADDR
2292: GO 2328
2294: LD_INT 25200
2296: DOUBLE
2297: GREATEREQUAL
2298: IFFALSE 2306
2300: LD_INT 37800
2302: DOUBLE
2303: LESSEQUAL
2304: IFTRUE 2308
2306: GO 2319
2308: POP
// crates_time := 1 1$55 ; else
2309: LD_ADDR_EXP 26
2313: PUSH
2314: LD_INT 4025
2316: ST_TO_ADDR
2317: GO 2328
2319: POP
// crates_time := 2 2$25 ; end ;
2320: LD_ADDR_EXP 26
2324: PUSH
2325: LD_INT 5075
2327: ST_TO_ADDR
// enable ;
2328: ENABLE
// end ; end_of_file
2329: END
// export function START ( ) ; begin
2330: LD_INT 0
2332: PPUSH
// InGameOn ;
2333: CALL_OW 8
// CenterOnXY ( 71 , 103 ) ;
2337: LD_INT 71
2339: PPUSH
2340: LD_INT 103
2342: PPUSH
2343: CALL_OW 84
// wait ( 0 0$1.5 ) ;
2347: LD_INT 52
2349: PPUSH
2350: CALL_OW 67
// if group_Vehicles <> 0 then
2354: LD_EXP 10
2358: PUSH
2359: LD_INT 0
2361: NONEQUAL
2362: IFFALSE 2424
// begin Say ( Heike , D1-Heike-1 ) ;
2364: LD_EXP 27
2368: PPUSH
2369: LD_STRING D1-Heike-1
2371: PPUSH
2372: CALL_OW 88
// if Rozier then
2376: LD_EXP 29
2380: IFFALSE 2394
// Say ( Rozier , D1-Roz-1 ) ;
2382: LD_EXP 29
2386: PPUSH
2387: LD_STRING D1-Roz-1
2389: PPUSH
2390: CALL_OW 88
// Say ( Heike , D1-Heike-2 ) ;
2394: LD_EXP 27
2398: PPUSH
2399: LD_STRING D1-Heike-2
2401: PPUSH
2402: CALL_OW 88
// if Harwood then
2406: LD_EXP 28
2410: IFFALSE 2424
// Say ( Harwood , D1-Har-1 ) ;
2412: LD_EXP 28
2416: PPUSH
2417: LD_STRING D1-Har-1
2419: PPUSH
2420: CALL_OW 88
// end ; Say ( Heike , D1-Heike-3 ) ;
2424: LD_EXP 27
2428: PPUSH
2429: LD_STRING D1-Heike-3
2431: PPUSH
2432: CALL_OW 88
// if Harwood then
2436: LD_EXP 28
2440: IFFALSE 2466
// begin Say ( Harwood , D1-Har-2 ) ;
2442: LD_EXP 28
2446: PPUSH
2447: LD_STRING D1-Har-2
2449: PPUSH
2450: CALL_OW 88
// Say ( Heike , D1-Heike-4 ) ;
2454: LD_EXP 27
2458: PPUSH
2459: LD_STRING D1-Heike-4
2461: PPUSH
2462: CALL_OW 88
// end ; InGameOff ;
2466: CALL_OW 9
// SaveForQuickRestart ( ) ;
2470: CALL_OW 22
// wait ( 0 0$0.5 ) ;
2474: LD_INT 18
2476: PPUSH
2477: CALL_OW 67
// ChangeMissionObjectives ( M1 ) ;
2481: LD_STRING M1
2483: PPUSH
2484: CALL_OW 337
// SetAreaMapShow ( _PlayerExit , 1 ) ;
2488: LD_INT 2
2490: PPUSH
2491: LD_INT 1
2493: PPUSH
2494: CALL_OW 424
// end ;
2498: LD_VAR 0 1
2502: RET
// every 0 0$2 trigger SeeAnyFromList ( side_player , group_apes ) do var ape ;
2503: LD_EXP 2
2507: PPUSH
2508: LD_EXP 9
2512: PPUSH
2513: CALL 7691 0 2
2517: IFFALSE 2596
2519: GO 2521
2521: DISABLE
2522: LD_INT 0
2524: PPUSH
// begin ape := WhoDoISee ( side_Player , group_Apes ) ;
2525: LD_ADDR_VAR 0 1
2529: PUSH
2530: LD_EXP 2
2534: PPUSH
2535: LD_EXP 9
2539: PPUSH
2540: CALL 7760 0 2
2544: ST_TO_ADDR
// CenterOnXY ( GetX ( ape ) , GetY ( ape ) ) ;
2545: LD_VAR 0 1
2549: PPUSH
2550: CALL_OW 250
2554: PPUSH
2555: LD_VAR 0 1
2559: PPUSH
2560: CALL_OW 251
2564: PPUSH
2565: CALL_OW 84
// DialogueOn ;
2569: CALL_OW 6
// wait ( 0 0$0.75 ) ;
2573: LD_INT 26
2575: PPUSH
2576: CALL_OW 67
// Say ( Heike , DEvent_SeeApes-Heike-1 ) ;
2580: LD_EXP 27
2584: PPUSH
2585: LD_STRING DEvent_SeeApes-Heike-1
2587: PPUSH
2588: CALL_OW 88
// DialogueOff ;
2592: CALL_OW 7
// end ;
2596: PPOPN 1
2598: END
// every 0 0$3 trigger SeeArea ( side_player , _River ) and not SeeFord and MissionTime = 0 0$0 do var un , nearest ;
2599: LD_EXP 2
2603: PPUSH
2604: LD_INT 11
2606: PPUSH
2607: CALL_OW 294
2611: PUSH
2612: LD_EXP 40
2616: NOT
2617: AND
2618: PUSH
2619: LD_EXP 43
2623: PUSH
2624: LD_INT 0
2626: EQUAL
2627: AND
2628: IFFALSE 2839
2630: GO 2632
2632: DISABLE
2633: LD_INT 0
2635: PPUSH
2636: PPUSH
// begin SeeRiver := true ;
2637: LD_ADDR_EXP 39
2641: PUSH
2642: LD_INT 1
2644: ST_TO_ADDR
// nearest := NearestUnitToArea ( group_Heike , _River ) ;
2645: LD_ADDR_VAR 0 2
2649: PUSH
2650: LD_EXP 6
2654: PPUSH
2655: LD_INT 11
2657: PPUSH
2658: CALL 7812 0 2
2662: ST_TO_ADDR
// wait ( 0 0$2.5 ) ;
2663: LD_INT 88
2665: PPUSH
2666: CALL_OW 67
// for un in group_Heike do
2670: LD_ADDR_VAR 0 1
2674: PUSH
2675: LD_EXP 6
2679: PUSH
2680: FOR_IN
2681: IFFALSE 2745
// if GetDistUnits ( un , nearest ) <= 12 then
2683: LD_VAR 0 1
2687: PPUSH
2688: LD_VAR 0 2
2692: PPUSH
2693: CALL_OW 296
2697: PUSH
2698: LD_INT 12
2700: LESSEQUAL
2701: IFFALSE 2714
// ComStop ( un ) else
2703: LD_VAR 0 1
2707: PPUSH
2708: CALL_OW 141
2712: GO 2743
// ComMoveXY ( un , GetX ( nearest ) , GetY ( nearest ) ) ;
2714: LD_VAR 0 1
2718: PPUSH
2719: LD_VAR 0 2
2723: PPUSH
2724: CALL_OW 250
2728: PPUSH
2729: LD_VAR 0 2
2733: PPUSH
2734: CALL_OW 251
2738: PPUSH
2739: CALL_OW 111
2743: GO 2680
2745: POP
2746: POP
// CenterOnUnits ( nearest ) ;
2747: LD_VAR 0 2
2751: PPUSH
2752: CALL_OW 85
// InGameOn ;
2756: CALL_OW 8
// wait ( 0 0$1 ) ;
2760: LD_INT 35
2762: PPUSH
2763: CALL_OW 67
// case nearest of Harwood :
2767: LD_VAR 0 2
2771: PUSH
2772: LD_EXP 28
2776: DOUBLE
2777: EQUAL
2778: IFTRUE 2782
2780: GO 2797
2782: POP
// Say ( Harwood , DEvent_SeeRiver-Har-1 ) ; Rozier :
2783: LD_EXP 28
2787: PPUSH
2788: LD_STRING DEvent_SeeRiver-Har-1
2790: PPUSH
2791: CALL_OW 88
2795: GO 2835
2797: LD_EXP 29
2801: DOUBLE
2802: EQUAL
2803: IFTRUE 2807
2805: GO 2822
2807: POP
// Say ( Rozier , DEvent_SeeRiver-Roz-1 ) ; else
2808: LD_EXP 29
2812: PPUSH
2813: LD_STRING DEvent_SeeRiver-Roz-1
2815: PPUSH
2816: CALL_OW 88
2820: GO 2835
2822: POP
// Say ( Heike , DEvent_SeeRiver-Heike-1 ) ; end ;
2823: LD_EXP 27
2827: PPUSH
2828: LD_STRING DEvent_SeeRiver-Heike-1
2830: PPUSH
2831: CALL_OW 88
// InGameOff ;
2835: CALL_OW 9
// end ;
2839: PPOPN 2
2841: END
// every 0 0$1 trigger SeeArea ( side_player , _Ford ) do var un , hex , b , buildings ;
2842: LD_EXP 2
2846: PPUSH
2847: LD_INT 12
2849: PPUSH
2850: CALL_OW 294
2854: IFFALSE 3365
2856: GO 2858
2858: DISABLE
2859: LD_INT 0
2861: PPUSH
2862: PPUSH
2863: PPUSH
2864: PPUSH
// begin SeeFord := true ;
2865: LD_ADDR_EXP 40
2869: PUSH
2870: LD_INT 1
2872: ST_TO_ADDR
// InGameOn ;
2873: CALL_OW 8
// CenterOnXY ( 109 , 53 ) ;
2877: LD_INT 109
2879: PPUSH
2880: LD_INT 53
2882: PPUSH
2883: CALL_OW 84
// wait ( 0 0$1 ) ;
2887: LD_INT 35
2889: PPUSH
2890: CALL_OW 67
// ComStop ( group_Heike ) ;
2894: LD_EXP 6
2898: PPUSH
2899: CALL_OW 141
// if SeeRiver then
2903: LD_EXP 39
2907: IFFALSE 2923
// Say ( Heike , D2a-Heike-1b ) else
2909: LD_EXP 27
2913: PPUSH
2914: LD_STRING D2a-Heike-1b
2916: PPUSH
2917: CALL_OW 88
2921: GO 2935
// Say ( Heike , D2a-Heike-1a ) ;
2923: LD_EXP 27
2927: PPUSH
2928: LD_STRING D2a-Heike-1a
2930: PPUSH
2931: CALL_OW 88
// CenterOnXY ( 102 , 39 ) ;
2935: LD_INT 102
2937: PPUSH
2938: LD_INT 39
2940: PPUSH
2941: CALL_OW 84
// wait ( 0 0$0.8 ) ;
2945: LD_INT 28
2947: PPUSH
2948: CALL_OW 67
// ComMoveXY ( group_Heike , 95 , 30 ) ;
2952: LD_EXP 6
2956: PPUSH
2957: LD_INT 95
2959: PPUSH
2960: LD_INT 30
2962: PPUSH
2963: CALL_OW 111
// repeat wait ( 1 ) ;
2967: LD_INT 1
2969: PPUSH
2970: CALL_OW 67
// until Shooting ( side_rus ) = true ;
2974: LD_EXP 3
2978: PPUSH
2979: CALL 8107 0 1
2983: PUSH
2984: LD_INT 1
2986: EQUAL
2987: IFFALSE 2967
// wait ( 0 0$1.2 ) ;
2989: LD_INT 42
2991: PPUSH
2992: CALL_OW 67
// DialogueOn ;
2996: CALL_OW 6
// Say ( Heike , D2a-Heike-2 ) ;
3000: LD_EXP 27
3004: PPUSH
3005: LD_STRING D2a-Heike-2
3007: PPUSH
3008: CALL_OW 88
// DialogueOff ;
3012: CALL_OW 7
// CenterOnXY ( 110 , 57 ) ;
3016: LD_INT 110
3018: PPUSH
3019: LD_INT 57
3021: PPUSH
3022: CALL_OW 84
// InGameOn ;
3026: CALL_OW 8
// for un in group_Heike do
3030: LD_ADDR_VAR 0 1
3034: PUSH
3035: LD_EXP 6
3039: PUSH
3040: FOR_IN
3041: IFFALSE 3088
// begin hex := RandHexArea ( _NearFord , false ) ;
3043: LD_ADDR_VAR 0 2
3047: PUSH
3048: LD_INT 13
3050: PPUSH
3051: LD_INT 0
3053: PPUSH
3054: CALL_OW 16
3058: ST_TO_ADDR
// ComMoveXY ( un , hex [ 1 ] , hex [ 2 ] ) ;
3059: LD_VAR 0 1
3063: PPUSH
3064: LD_VAR 0 2
3068: PUSH
3069: LD_INT 1
3071: ARRAY
3072: PPUSH
3073: LD_VAR 0 2
3077: PUSH
3078: LD_INT 2
3080: ARRAY
3081: PPUSH
3082: CALL_OW 111
// end ;
3086: GO 3040
3088: POP
3089: POP
// repeat wait ( 1 ) ;
3090: LD_INT 1
3092: PPUSH
3093: CALL_OW 67
// ComMoveToArea ( Heike , _NearFord ) ;
3097: LD_EXP 27
3101: PPUSH
3102: LD_INT 13
3104: PPUSH
3105: CALL_OW 113
// until IsInArea ( Heike , _NearFord ) ;
3109: LD_EXP 27
3113: PPUSH
3114: LD_INT 13
3116: PPUSH
3117: CALL_OW 308
3121: IFFALSE 3090
// wait ( 0 0$2 ) ;
3123: LD_INT 70
3125: PPUSH
3126: CALL_OW 67
// Say ( Rozier , D2b-Roz-1 ) ;
3130: LD_EXP 29
3134: PPUSH
3135: LD_STRING D2b-Roz-1
3137: PPUSH
3138: CALL_OW 88
// Say ( Heike , D2b-Heike-1 ) ;
3142: LD_EXP 27
3146: PPUSH
3147: LD_STRING D2b-Heike-1
3149: PPUSH
3150: CALL_OW 88
// dwait ( 0 0$1.2 ) ;
3154: LD_INT 42
3156: PPUSH
3157: CALL_OW 68
// SayRadio ( Horwitz , D2b-Hor-1 ) ;
3161: LD_EXP 33
3165: PPUSH
3166: LD_STRING D2b-Hor-1
3168: PPUSH
3169: CALL_OW 94
// Say ( Heike , D2b-Heike-2 ) ;
3173: LD_EXP 27
3177: PPUSH
3178: LD_STRING D2b-Heike-2
3180: PPUSH
3181: CALL_OW 88
// SayRadio ( Horwitz , D2b-Hor-2 ) ;
3185: LD_EXP 33
3189: PPUSH
3190: LD_STRING D2b-Hor-2
3192: PPUSH
3193: CALL_OW 94
// Say ( Heike , D2b-Heike-3 ) ;
3197: LD_EXP 27
3201: PPUSH
3202: LD_STRING D2b-Heike-3
3204: PPUSH
3205: CALL_OW 88
// SayRadio ( Horwitz , D2b-Hor-3 ) ;
3209: LD_EXP 33
3213: PPUSH
3214: LD_STRING D2b-Hor-3
3216: PPUSH
3217: CALL_OW 94
// Say ( Heike , D2b-Heike-4 ) ;
3221: LD_EXP 27
3225: PPUSH
3226: LD_STRING D2b-Heike-4
3228: PPUSH
3229: CALL_OW 88
// SayRadio ( Horwitz , D2b-Hor-4 ) ;
3233: LD_EXP 33
3237: PPUSH
3238: LD_STRING D2b-Hor-4
3240: PPUSH
3241: CALL_OW 94
// dwait ( 0 0$1.5 ) ;
3245: LD_INT 52
3247: PPUSH
3248: CALL_OW 68
// Say ( Heike , D2b-Heike-5 ) ;
3252: LD_EXP 27
3256: PPUSH
3257: LD_STRING D2b-Heike-5
3259: PPUSH
3260: CALL_OW 88
// InGameOff ;
3264: CALL_OW 9
// wait ( 0 0$0.8 ) ;
3268: LD_INT 28
3270: PPUSH
3271: CALL_OW 67
// ChangeMissionObjectives ( M2 ) ;
3275: LD_STRING M2
3277: PPUSH
3278: CALL_OW 337
// buildings := [ b_depot , b_lab , b_workshop , b_factory , b_armoury , b_breastwork , b_solar_power ] ;
3282: LD_ADDR_VAR 0 4
3286: PUSH
3287: LD_INT 0
3289: PUSH
3290: LD_INT 6
3292: PUSH
3293: LD_INT 2
3295: PUSH
3296: LD_INT 3
3298: PUSH
3299: LD_INT 4
3301: PUSH
3302: LD_INT 31
3304: PUSH
3305: LD_INT 27
3307: PUSH
3308: EMPTY
3309: LIST
3310: LIST
3311: LIST
3312: LIST
3313: LIST
3314: LIST
3315: LIST
3316: ST_TO_ADDR
// for b in buildings do
3317: LD_ADDR_VAR 0 3
3321: PUSH
3322: LD_VAR 0 4
3326: PUSH
3327: FOR_IN
3328: IFFALSE 3349
// SetRestrict ( b , side_player , true ) ;
3330: LD_VAR 0 3
3334: PPUSH
3335: LD_EXP 2
3339: PPUSH
3340: LD_INT 1
3342: PPUSH
3343: CALL_OW 324
3347: GO 3327
3349: POP
3350: POP
// InGameOff ;
3351: CALL_OW 9
// MissionTime := tick ;
3355: LD_ADDR_EXP 43
3359: PUSH
3360: LD_OWVAR 1
3364: ST_TO_ADDR
// end ;
3365: PPOPN 4
3367: END
// on ResearchComplete ( tech , lab ) do begin case tech of tech_SolPow :
3368: LD_VAR 0 1
3372: PUSH
3373: LD_INT 35
3375: DOUBLE
3376: EQUAL
3377: IFTRUE 3381
3379: GO 3551
3381: POP
// begin SolPow_researched := true ;
3382: LD_ADDR_EXP 48
3386: PUSH
3387: LD_INT 1
3389: ST_TO_ADDR
// if Harwood and IsOk ( Harwood ) then
3390: LD_EXP 28
3394: PUSH
3395: LD_EXP 28
3399: PPUSH
3400: CALL_OW 302
3404: AND
3405: IFFALSE 3419
// Say ( Harwood , DEvent_SolPow-Har-1 ) ;
3407: LD_EXP 28
3411: PPUSH
3412: LD_STRING DEvent_SolPow-Har-1
3414: PPUSH
3415: CALL_OW 88
// if not Harwood or not IsOk ( Harwood ) and GetSide ( Bowl ) = side_player and IsOk ( Bowl ) then
3419: LD_EXP 28
3423: NOT
3424: PUSH
3425: LD_EXP 28
3429: PPUSH
3430: CALL_OW 302
3434: NOT
3435: PUSH
3436: LD_EXP 34
3440: PPUSH
3441: CALL_OW 255
3445: PUSH
3446: LD_EXP 2
3450: EQUAL
3451: AND
3452: PUSH
3453: LD_EXP 34
3457: PPUSH
3458: CALL_OW 302
3462: AND
3463: OR
3464: IFFALSE 3478
// Say ( Bowl , DEvent_SolPow-Bow-1 ) ;
3466: LD_EXP 34
3470: PPUSH
3471: LD_STRING DEvent_SolPow-Bow-1
3473: PPUSH
3474: CALL_OW 88
// if not Harwood or not IsOk ( Harwood ) and GetSide ( Bowl ) <> side_player or not IsOk ( Bowl ) and IsOk ( Heike ) then
3478: LD_EXP 28
3482: NOT
3483: PUSH
3484: LD_EXP 28
3488: PPUSH
3489: CALL_OW 302
3493: NOT
3494: PUSH
3495: LD_EXP 34
3499: PPUSH
3500: CALL_OW 255
3504: PUSH
3505: LD_EXP 2
3509: NONEQUAL
3510: AND
3511: OR
3512: PUSH
3513: LD_EXP 34
3517: PPUSH
3518: CALL_OW 302
3522: NOT
3523: PUSH
3524: LD_EXP 27
3528: PPUSH
3529: CALL_OW 302
3533: AND
3534: OR
3535: IFFALSE 3549
// Say ( Heike , DEvent_SolPow-Heike-1 ) ;
3537: LD_EXP 27
3541: PPUSH
3542: LD_STRING DEvent_SolPow-Heike-1
3544: PPUSH
3545: CALL_OW 88
// end ; tech_SolEng :
3549: GO 3730
3551: LD_INT 45
3553: DOUBLE
3554: EQUAL
3555: IFTRUE 3559
3557: GO 3729
3559: POP
// begin SolEng_researched := true ;
3560: LD_ADDR_EXP 49
3564: PUSH
3565: LD_INT 1
3567: ST_TO_ADDR
// if Harwood and IsOk ( Harwood ) then
3568: LD_EXP 28
3572: PUSH
3573: LD_EXP 28
3577: PPUSH
3578: CALL_OW 302
3582: AND
3583: IFFALSE 3597
// Say ( Harwood , DEvent_SolEng-Har-1 ) ;
3585: LD_EXP 28
3589: PPUSH
3590: LD_STRING DEvent_SolEng-Har-1
3592: PPUSH
3593: CALL_OW 88
// if not Harwood or not IsOk ( Harwood ) and GetSide ( Bowl ) = side_player and IsOk ( Bowl ) then
3597: LD_EXP 28
3601: NOT
3602: PUSH
3603: LD_EXP 28
3607: PPUSH
3608: CALL_OW 302
3612: NOT
3613: PUSH
3614: LD_EXP 34
3618: PPUSH
3619: CALL_OW 255
3623: PUSH
3624: LD_EXP 2
3628: EQUAL
3629: AND
3630: PUSH
3631: LD_EXP 34
3635: PPUSH
3636: CALL_OW 302
3640: AND
3641: OR
3642: IFFALSE 3656
// Say ( Bowl , DEvent_SolEng-Bow-1 ) ;
3644: LD_EXP 34
3648: PPUSH
3649: LD_STRING DEvent_SolEng-Bow-1
3651: PPUSH
3652: CALL_OW 88
// if not Harwood or not IsOk ( Harwood ) and GetSide ( Bowl ) <> side_player or not IsOk ( Bowl ) and IsOk ( Heike ) then
3656: LD_EXP 28
3660: NOT
3661: PUSH
3662: LD_EXP 28
3666: PPUSH
3667: CALL_OW 302
3671: NOT
3672: PUSH
3673: LD_EXP 34
3677: PPUSH
3678: CALL_OW 255
3682: PUSH
3683: LD_EXP 2
3687: NONEQUAL
3688: AND
3689: OR
3690: PUSH
3691: LD_EXP 34
3695: PPUSH
3696: CALL_OW 302
3700: NOT
3701: PUSH
3702: LD_EXP 27
3706: PPUSH
3707: CALL_OW 302
3711: AND
3712: OR
3713: IFFALSE 3727
// Say ( Heike , DEvent_SolEng-Heike-1 ) ;
3715: LD_EXP 27
3719: PPUSH
3720: LD_STRING DEvent_SolEng-Heike-1
3722: PPUSH
3723: CALL_OW 88
// end ; end ;
3727: GO 3730
3729: POP
// end ;
3730: PPOPN 2
3732: END
// export ResVeh ; every 0 0$1 trigger tick >= ( MissionTime + 9 9$25 ) and MissionTime <> 0 0$0 do var un , i , hex ; var ResUnits , ResVehs , ResMec ; var d ; var Veh , OtherVeh ;
3733: LD_OWVAR 1
3737: PUSH
3738: LD_EXP 43
3742: PUSH
3743: LD_INT 19775
3745: PLUS
3746: GREATEREQUAL
3747: PUSH
3748: LD_EXP 43
3752: PUSH
3753: LD_INT 0
3755: NONEQUAL
3756: AND
3757: IFFALSE 3997
3759: GO 3761
3761: DISABLE
3762: LD_INT 0
3764: PPUSH
3765: PPUSH
3766: PPUSH
3767: PPUSH
3768: PPUSH
3769: PPUSH
3770: PPUSH
3771: PPUSH
3772: PPUSH
// begin Veh := UnitFilter ( group_Resines , [ f_type , unit_vehicle ] ) diff ResVehicle ;
3773: LD_ADDR_VAR 0 8
3777: PUSH
3778: LD_EXP 8
3782: PPUSH
3783: LD_INT 21
3785: PUSH
3786: LD_INT 2
3788: PUSH
3789: EMPTY
3790: LIST
3791: LIST
3792: PPUSH
3793: CALL_OW 72
3797: PUSH
3798: LD_EXP 42
3802: DIFF
3803: ST_TO_ADDR
// for un in group_Resines do
3804: LD_ADDR_VAR 0 1
3808: PUSH
3809: LD_EXP 8
3813: PUSH
3814: FOR_IN
3815: IFFALSE 3909
// begin if un <> Resines and GetClass ( un ) <> class_mechanic then
3817: LD_VAR 0 1
3821: PUSH
3822: LD_EXP 35
3826: NONEQUAL
3827: PUSH
3828: LD_VAR 0 1
3832: PPUSH
3833: CALL_OW 257
3837: PUSH
3838: LD_INT 3
3840: NONEQUAL
3841: AND
3842: IFFALSE 3861
// PlaceUnitArea ( un , _ResEnter , false ) else
3844: LD_VAR 0 1
3848: PPUSH
3849: LD_INT 17
3851: PPUSH
3852: LD_INT 0
3854: PPUSH
3855: CALL_OW 49
3859: GO 3907
// if un = Resines then
3861: LD_VAR 0 1
3865: PUSH
3866: LD_EXP 35
3870: EQUAL
3871: IFFALSE 3889
// PlaceHumanInUnit ( un , ResVehicle ) else
3873: LD_VAR 0 1
3877: PPUSH
3878: LD_EXP 42
3882: PPUSH
3883: CALL_OW 52
3887: GO 3907
// PlaceHumanInUnit ( un , Veh [ 1 ] ) ;
3889: LD_VAR 0 1
3893: PPUSH
3894: LD_VAR 0 8
3898: PUSH
3899: LD_INT 1
3901: ARRAY
3902: PPUSH
3903: CALL_OW 52
// end ;
3907: GO 3814
3909: POP
3910: POP
// for i in group_Resines do
3911: LD_ADDR_VAR 0 2
3915: PUSH
3916: LD_EXP 8
3920: PUSH
3921: FOR_IN
3922: IFFALSE 3969
// begin hex := RandHexArea ( _ResMeeting , false ) ;
3924: LD_ADDR_VAR 0 3
3928: PUSH
3929: LD_INT 18
3931: PPUSH
3932: LD_INT 0
3934: PPUSH
3935: CALL_OW 16
3939: ST_TO_ADDR
// ComMoveXY ( i , hex [ 1 ] , hex [ 2 ] ) ;
3940: LD_VAR 0 2
3944: PPUSH
3945: LD_VAR 0 3
3949: PUSH
3950: LD_INT 1
3952: ARRAY
3953: PPUSH
3954: LD_VAR 0 3
3958: PUSH
3959: LD_INT 2
3961: ARRAY
3962: PPUSH
3963: CALL_OW 111
// end ;
3967: GO 3921
3969: POP
3970: POP
// wait ( 0 0$3 ) ;
3971: LD_INT 105
3973: PPUSH
3974: CALL_OW 67
// CreateResourcesXY ( mat_oil , 1 , 52 , 28 , true ) ;
3978: LD_INT 2
3980: PPUSH
3981: LD_INT 1
3983: PPUSH
3984: LD_INT 52
3986: PPUSH
3987: LD_INT 28
3989: PPUSH
3990: LD_INT 1
3992: PPUSH
3993: CALL_OW 58
// end ;
3997: PPOPN 9
3999: END
// every 0 0$5 trigger IsPlaced ( Resines ) and GetY ( Resines ) < 73 do
4000: LD_EXP 35
4004: PPUSH
4005: CALL_OW 305
4009: PUSH
4010: LD_EXP 35
4014: PPUSH
4015: CALL_OW 251
4019: PUSH
4020: LD_INT 73
4022: LESS
4023: AND
4024: IFFALSE 4238
4026: GO 4028
4028: DISABLE
// begin InGameOn ;
4029: CALL_OW 8
// CenterOnXY ( 120 , 66 ) ;
4033: LD_INT 120
4035: PPUSH
4036: LD_INT 66
4038: PPUSH
4039: CALL_OW 84
// wait ( 0 0$1 ) ;
4043: LD_INT 35
4045: PPUSH
4046: CALL_OW 67
// CenterOnXY ( 120 , 68 ) ;
4050: LD_INT 120
4052: PPUSH
4053: LD_INT 68
4055: PPUSH
4056: CALL_OW 84
// DialogueOn ;
4060: CALL_OW 6
// Say ( Resines , D6-Res-1 ) ;
4064: LD_EXP 35
4068: PPUSH
4069: LD_STRING D6-Res-1
4071: PPUSH
4072: CALL_OW 88
// Say ( Heike , D6-Heike-1 ) ;
4076: LD_EXP 27
4080: PPUSH
4081: LD_STRING D6-Heike-1
4083: PPUSH
4084: CALL_OW 88
// Say ( Resines , D6-Res-2 ) ;
4088: LD_EXP 35
4092: PPUSH
4093: LD_STRING D6-Res-2
4095: PPUSH
4096: CALL_OW 88
// Say ( Heike , D6-Heike-2 ) ;
4100: LD_EXP 27
4104: PPUSH
4105: LD_STRING D6-Heike-2
4107: PPUSH
4108: CALL_OW 88
// Say ( Resines , D6-Res-3 ) ;
4112: LD_EXP 35
4116: PPUSH
4117: LD_STRING D6-Res-3
4119: PPUSH
4120: CALL_OW 88
// if Rozier and IsOk ( Rozier ) then
4124: LD_EXP 29
4128: PUSH
4129: LD_EXP 29
4133: PPUSH
4134: CALL_OW 302
4138: AND
4139: IFFALSE 4153
// Say ( Rozier , D6-Roz-1 ) ;
4141: LD_EXP 29
4145: PPUSH
4146: LD_STRING D6-Roz-1
4148: PPUSH
4149: CALL_OW 88
// if GetSide ( Bowl ) = side_player then
4153: LD_EXP 34
4157: PPUSH
4158: CALL_OW 255
4162: PUSH
4163: LD_EXP 2
4167: EQUAL
4168: IFFALSE 4184
// Say ( Heike , D6-Heike-3a ) else
4170: LD_EXP 27
4174: PPUSH
4175: LD_STRING D6-Heike-3a
4177: PPUSH
4178: CALL_OW 88
4182: GO 4196
// Say ( Heike , D6-Heike-3b ) ;
4184: LD_EXP 27
4188: PPUSH
4189: LD_STRING D6-Heike-3b
4191: PPUSH
4192: CALL_OW 88
// Say ( Resines , D6-Res-4 ) ;
4196: LD_EXP 35
4200: PPUSH
4201: LD_STRING D6-Res-4
4203: PPUSH
4204: CALL_OW 88
// DialogueOff ;
4208: CALL_OW 7
// InGameOff ;
4212: CALL_OW 9
// wait ( 0 0$0.5 ) ;
4216: LD_INT 18
4218: PPUSH
4219: CALL_OW 67
// Query ( QHelp1 ) ;
4223: LD_STRING QHelp1
4225: PPUSH
4226: CALL_OW 97
// ResAtPos := true ;
4230: LD_ADDR_EXP 41
4234: PUSH
4235: LD_INT 1
4237: ST_TO_ADDR
// end ;
4238: END
// var QHelp_end ; every 0 0$2 trigger IsSelected ( ResVehicle ) and ResAtPos do var un , QHelp ; var pockej ;
4239: LD_EXP 42
4243: PPUSH
4244: CALL_OW 306
4248: PUSH
4249: LD_EXP 41
4253: AND
4254: IFFALSE 4456
4256: GO 4258
4258: DISABLE
4259: LD_INT 0
4261: PPUSH
4262: PPUSH
4263: PPUSH
// begin QHelp := Query ( Qhelp2 ) ;
4264: LD_ADDR_VAR 0 2
4268: PUSH
4269: LD_STRING Qhelp2
4271: PPUSH
4272: CALL_OW 97
4276: ST_TO_ADDR
// pockej := 0 ;
4277: LD_ADDR_VAR 0 3
4281: PUSH
4282: LD_INT 0
4284: ST_TO_ADDR
// case QHelp of 1 :
4285: LD_VAR 0 2
4289: PUSH
4290: LD_INT 1
4292: DOUBLE
4293: EQUAL
4294: IFTRUE 4298
4296: GO 4383
4298: POP
// begin Say ( Resines , DEvent_Help-Res-1 ) ;
4299: LD_EXP 35
4303: PPUSH
4304: LD_STRING DEvent_Help-Res-1
4306: PPUSH
4307: CALL_OW 88
// QHelp_end := true ;
4311: LD_ADDR_LOC 1
4315: PUSH
4316: LD_INT 1
4318: ST_TO_ADDR
// for un in group_Resines do
4319: LD_ADDR_VAR 0 1
4323: PUSH
4324: LD_EXP 8
4328: PUSH
4329: FOR_IN
4330: IFFALSE 4349
// ComAgressiveMove ( un , 92 , 16 ) ;
4332: LD_VAR 0 1
4336: PPUSH
4337: LD_INT 92
4339: PPUSH
4340: LD_INT 16
4342: PPUSH
4343: CALL_OW 114
4347: GO 4329
4349: POP
4350: POP
// AddComAgressiveMove ( un , 98 , 15 ) ;
4351: LD_VAR 0 1
4355: PPUSH
4356: LD_INT 98
4358: PPUSH
4359: LD_INT 15
4361: PPUSH
4362: CALL_OW 174
// AddComMoveXY ( un , 89 , 1 ) ;
4366: LD_VAR 0 1
4370: PPUSH
4371: LD_INT 89
4373: PPUSH
4374: LD_INT 1
4376: PPUSH
4377: CALL_OW 171
// end ; 2 :
4381: GO 4431
4383: LD_INT 2
4385: DOUBLE
4386: EQUAL
4387: IFTRUE 4391
4389: GO 4430
4391: POP
// begin Say ( Resines , DEvent_Help-Res-2 ) ;
4392: LD_EXP 35
4396: PPUSH
4397: LD_STRING DEvent_Help-Res-2
4399: PPUSH
4400: CALL_OW 88
// DeselectUnits ( ResVehicle ) ;
4404: LD_EXP 42
4408: PPUSH
4409: CALL_OW 491
// wait ( 0 0$1 ) ;
4413: LD_INT 35
4415: PPUSH
4416: CALL_OW 67
// pockej := 1 ;
4420: LD_ADDR_VAR 0 3
4424: PUSH
4425: LD_INT 1
4427: ST_TO_ADDR
// end ; end ;
4428: GO 4431
4430: POP
// if not QHelp_end then
4431: LD_LOC 1
4435: NOT
4436: IFFALSE 4439
// enable ;
4438: ENABLE
// if pockej = 1 then
4439: LD_VAR 0 3
4443: PUSH
4444: LD_INT 1
4446: EQUAL
4447: IFFALSE 4456
// wait ( 0 0$5 ) ;
4449: LD_INT 175
4451: PPUSH
4452: CALL_OW 67
// end ;
4456: PPOPN 3
4458: END
// every 0 0$0.5 do var un , list ;
4459: GO 4461
4461: DISABLE
4462: LD_INT 0
4464: PPUSH
4465: PPUSH
// begin list := FilterUnitsinArea ( _ResExit , [ f_side , side_arab ] ) ;
4466: LD_ADDR_VAR 0 2
4470: PUSH
4471: LD_INT 21
4473: PPUSH
4474: LD_INT 22
4476: PUSH
4477: LD_EXP 4
4481: PUSH
4482: EMPTY
4483: LIST
4484: LIST
4485: PPUSH
4486: CALL_OW 70
4490: ST_TO_ADDR
// for un in list do
4491: LD_ADDR_VAR 0 1
4495: PUSH
4496: LD_VAR 0 2
4500: PUSH
4501: FOR_IN
4502: IFFALSE 4526
// if IsOk ( un ) then
4504: LD_VAR 0 1
4508: PPUSH
4509: CALL_OW 302
4513: IFFALSE 4524
// RemoveUnit ( un ) ;
4515: LD_VAR 0 1
4519: PPUSH
4520: CALL_OW 64
4524: GO 4501
4526: POP
4527: POP
// enable ;
4528: ENABLE
// end ;
4529: PPOPN 2
4531: END
// on BuildingComplete ( b ) do begin if UnitFilter ( b , [ [ f_side , side_player ] , [ f_btype , b_depot ] ] ) then
4532: LD_VAR 0 1
4536: PPUSH
4537: LD_INT 22
4539: PUSH
4540: LD_EXP 2
4544: PUSH
4545: EMPTY
4546: LIST
4547: LIST
4548: PUSH
4549: LD_INT 30
4551: PUSH
4552: LD_INT 0
4554: PUSH
4555: EMPTY
4556: LIST
4557: LIST
4558: PUSH
4559: EMPTY
4560: LIST
4561: LIST
4562: PPUSH
4563: CALL_OW 72
4567: IFFALSE 4576
// ChangeMissionObjectives ( M1&2-chg ) ;
4569: LD_STRING M1&2-chg
4571: PPUSH
4572: CALL_OW 337
// end ;
4576: PPOPN 1
4578: END
// on VehicleConstructionStarted ( fac , chas , eng , con , weap ) do begin if chas = ar_hovercraft and GetSide ( Bowl ) <> side_player then
4579: LD_VAR 0 2
4583: PUSH
4584: LD_INT 11
4586: EQUAL
4587: PUSH
4588: LD_EXP 34
4592: PPUSH
4593: CALL_OW 255
4597: PUSH
4598: LD_EXP 2
4602: NONEQUAL
4603: AND
4604: IFFALSE 4622
// begin ComCancel ( fac ) ;
4606: LD_VAR 0 1
4610: PPUSH
4611: CALL_OW 127
// Query ( QHovercraft ) ;
4615: LD_STRING QHovercraft
4617: PPUSH
4618: CALL_OW 97
// end ; end ;
4622: PPOPN 5
4624: END
// on VehicleConstructed ( veh , fac ) do begin if GetChassis ( veh ) = ar_hovercraft then
4625: LD_VAR 0 1
4629: PPUSH
4630: CALL_OW 265
4634: PUSH
4635: LD_INT 11
4637: EQUAL
4638: IFFALSE 4654
// hovercraft_count := hovercraft_count + 1 ;
4640: LD_ADDR_EXP 47
4644: PUSH
4645: LD_EXP 47
4649: PUSH
4650: LD_INT 1
4652: PLUS
4653: ST_TO_ADDR
// end ;
4654: PPOPN 2
4656: END
// every 0 0$1 trigger hovercraft_count <> 0 do
4657: LD_EXP 47
4661: PUSH
4662: LD_INT 0
4664: NONEQUAL
4665: IFFALSE 4677
4667: GO 4669
4669: DISABLE
// ChangeMissionObjectives ( M4-out ) ; end_of_file
4670: LD_STRING M4-out
4672: PPUSH
4673: CALL_OW 337
4677: END
// every 0 0$1 trigger tick >= ( MissionTime + 4 4$20 ) and MissionTime <> 0 0$0 do
4678: LD_OWVAR 1
4682: PUSH
4683: LD_EXP 43
4687: PUSH
4688: LD_INT 9100
4690: PLUS
4691: GREATEREQUAL
4692: PUSH
4693: LD_EXP 43
4697: PUSH
4698: LD_INT 0
4700: NONEQUAL
4701: AND
4702: IFFALSE 4793
4704: GO 4706
4706: DISABLE
// begin DialogueOn ;
4707: CALL_OW 6
// CenterOnUnits ( Heike ) ;
4711: LD_EXP 27
4715: PPUSH
4716: CALL_OW 85
// dwait ( 0 0$0.5 ) ;
4720: LD_INT 18
4722: PPUSH
4723: CALL_OW 68
// SayRadio ( Horwitz , D3-Hor-1 ) ;
4727: LD_EXP 33
4731: PPUSH
4732: LD_STRING D3-Hor-1
4734: PPUSH
4735: CALL_OW 94
// Say ( Heike , D3-Heike-1 ) ;
4739: LD_EXP 27
4743: PPUSH
4744: LD_STRING D3-Heike-1
4746: PPUSH
4747: CALL_OW 88
// SayRadio ( Horwitz , D3-Hor-2 ) ;
4751: LD_EXP 33
4755: PPUSH
4756: LD_STRING D3-Hor-2
4758: PPUSH
4759: CALL_OW 94
// Say ( Heike , D3-Heike-2 ) ;
4763: LD_EXP 27
4767: PPUSH
4768: LD_STRING D3-Heike-2
4770: PPUSH
4771: CALL_OW 88
// DialogueOff ;
4775: CALL_OW 7
// wait ( 0 0$0.5 ) ;
4779: LD_INT 18
4781: PPUSH
4782: CALL_OW 67
// ChangeMissionObjectives ( M3 ) ;
4786: LD_STRING M3
4788: PPUSH
4789: CALL_OW 337
// end ;
4793: END
// every 0 0$1 trigger tick >= ( MissionTime + 5 5$40 ) and MissionTime <> 0 0$0 do
4794: LD_OWVAR 1
4798: PUSH
4799: LD_EXP 43
4803: PUSH
4804: LD_INT 11900
4806: PLUS
4807: GREATEREQUAL
4808: PUSH
4809: LD_EXP 43
4813: PUSH
4814: LD_INT 0
4816: NONEQUAL
4817: AND
4818: IFFALSE 4941
4820: GO 4822
4822: DISABLE
// begin DialogueOn ;
4823: CALL_OW 6
// CenterOnUnits ( Heike ) ;
4827: LD_EXP 27
4831: PPUSH
4832: CALL_OW 85
// dwait ( 0 0$0.5 ) ;
4836: LD_INT 18
4838: PPUSH
4839: CALL_OW 68
// SayRadio ( Horwitz , D4-Hor-1 ) ;
4843: LD_EXP 33
4847: PPUSH
4848: LD_STRING D4-Hor-1
4850: PPUSH
4851: CALL_OW 94
// dwait ( 0 0$0.8 ) ;
4855: LD_INT 28
4857: PPUSH
4858: CALL_OW 68
// SayRadio ( Speakers [ 1 ] , D4-RuSo-1 ) ;
4862: CALL 6665 0 0
4866: PUSH
4867: LD_INT 1
4869: ARRAY
4870: PPUSH
4871: LD_STRING D4-RuSo-1
4873: PPUSH
4874: CALL_OW 94
// SayRadio ( Speakers [ 2 ] , D4-RuCom-1 ) ;
4878: CALL 6665 0 0
4882: PUSH
4883: LD_INT 2
4885: ARRAY
4886: PPUSH
4887: LD_STRING D4-RuCom-1
4889: PPUSH
4890: CALL_OW 94
// dwait ( 0 0$1.5 ) ;
4894: LD_INT 52
4896: PPUSH
4897: CALL_OW 68
// Say ( Heike , D4-Heike-1 ) ;
4901: LD_EXP 27
4905: PPUSH
4906: LD_STRING D4-Heike-1
4908: PPUSH
4909: CALL_OW 88
// SayRadio ( Horwitz , D4-Hor-2 ) ;
4913: LD_EXP 33
4917: PPUSH
4918: LD_STRING D4-Hor-2
4920: PPUSH
4921: CALL_OW 94
// Say ( Heike , D4-Heike-2 ) ;
4925: LD_EXP 27
4929: PPUSH
4930: LD_STRING D4-Heike-2
4932: PPUSH
4933: CALL_OW 88
// DialogueOff ;
4937: CALL_OW 7
// end ;
4941: END
// every 0 0$1 trigger tick >= ( MissionTime + 7 7$15 ) and MissionTime <> 0 0$0 do var un , wp ;
4942: LD_OWVAR 1
4946: PUSH
4947: LD_EXP 43
4951: PUSH
4952: LD_INT 15225
4954: PLUS
4955: GREATEREQUAL
4956: PUSH
4957: LD_EXP 43
4961: PUSH
4962: LD_INT 0
4964: NONEQUAL
4965: AND
4966: IFFALSE 5154
4968: GO 4970
4970: DISABLE
4971: LD_INT 0
4973: PPUSH
4974: PPUSH
// begin ConvoyUnits ( ) ;
4975: CALL 6760 0 0
// wp := [ [ 128 , 91 ] , [ 123 , 78 ] , [ 118 , 73 ] , [ 107 , 48 ] , [ 97 , 31 ] , [ 94 , 20 ] ] ;
4979: LD_ADDR_VAR 0 2
4983: PUSH
4984: LD_INT 128
4986: PUSH
4987: LD_INT 91
4989: PUSH
4990: EMPTY
4991: LIST
4992: LIST
4993: PUSH
4994: LD_INT 123
4996: PUSH
4997: LD_INT 78
4999: PUSH
5000: EMPTY
5001: LIST
5002: LIST
5003: PUSH
5004: LD_INT 118
5006: PUSH
5007: LD_INT 73
5009: PUSH
5010: EMPTY
5011: LIST
5012: LIST
5013: PUSH
5014: LD_INT 107
5016: PUSH
5017: LD_INT 48
5019: PUSH
5020: EMPTY
5021: LIST
5022: LIST
5023: PUSH
5024: LD_INT 97
5026: PUSH
5027: LD_INT 31
5029: PUSH
5030: EMPTY
5031: LIST
5032: LIST
5033: PUSH
5034: LD_INT 94
5036: PUSH
5037: LD_INT 20
5039: PUSH
5040: EMPTY
5041: LIST
5042: LIST
5043: PUSH
5044: EMPTY
5045: LIST
5046: LIST
5047: LIST
5048: LIST
5049: LIST
5050: LIST
5051: ST_TO_ADDR
// for un in group_Pows ^ group_ConUnits do
5052: LD_ADDR_VAR 0 1
5056: PUSH
5057: LD_EXP 7
5061: PUSH
5062: LD_EXP 11
5066: ADD
5067: PUSH
5068: FOR_IN
5069: IFFALSE 5152
// begin PlaceUnitArea ( un , _ConvoyEnter , false ) ;
5071: LD_VAR 0 1
5075: PPUSH
5076: LD_INT 19
5078: PPUSH
5079: LD_INT 0
5081: PPUSH
5082: CALL_OW 49
// if GetType ( un ) = unit_human then
5086: LD_VAR 0 1
5090: PPUSH
5091: CALL_OW 247
5095: PUSH
5096: LD_INT 1
5098: EQUAL
5099: IFFALSE 5123
// McMove ( 0 , group_ConUnits , wp , mc_move_agressive ) else
5101: LD_INT 0
5103: PPUSH
5104: LD_EXP 11
5108: PPUSH
5109: LD_VAR 0 2
5113: PPUSH
5114: LD_INT 6
5116: PPUSH
5117: CALL_OW 398
5121: GO 5150
// McMove ( 0 , un , wp , [ mc_move_agressive , mc_move_waitwp ] ) ;
5123: LD_INT 0
5125: PPUSH
5126: LD_VAR 0 1
5130: PPUSH
5131: LD_VAR 0 2
5135: PPUSH
5136: LD_INT 6
5138: PUSH
5139: LD_INT 3
5141: PUSH
5142: EMPTY
5143: LIST
5144: LIST
5145: PPUSH
5146: CALL_OW 398
// end ;
5150: GO 5068
5152: POP
5153: POP
// end ;
5154: PPOPN 2
5156: END
// every 0 0$2 trigger IsPlaced ( Bowl ) do var un , i ;
5157: LD_EXP 34
5161: PPUSH
5162: CALL_OW 305
5166: IFFALSE 5261
5168: GO 5170
5170: DISABLE
5171: LD_INT 0
5173: PPUSH
5174: PPUSH
// begin for un in group_ConUnits do
5175: LD_ADDR_VAR 0 1
5179: PUSH
5180: LD_EXP 11
5184: PUSH
5185: FOR_IN
5186: IFFALSE 5238
// begin if IsOk ( un ) then
5188: LD_VAR 0 1
5192: PPUSH
5193: CALL_OW 302
5197: IFFALSE 5236
// for i in group_Pows diff group_PowsInDep do
5199: LD_ADDR_VAR 0 2
5203: PUSH
5204: LD_EXP 7
5208: PUSH
5209: LD_EXP 12
5213: DIFF
5214: PUSH
5215: FOR_IN
5216: IFFALSE 5234
// FollowUnit ( i , un ) ;
5218: LD_VAR 0 2
5222: PPUSH
5223: LD_VAR 0 1
5227: PPUSH
5228: CALL 8677 0 2
5232: GO 5215
5234: POP
5235: POP
// end ;
5236: GO 5185
5238: POP
5239: POP
// if GetSide ( Bowl ) <> side_player then
5240: LD_EXP 34
5244: PPUSH
5245: CALL_OW 255
5249: PUSH
5250: LD_EXP 2
5254: NONEQUAL
5255: IFFALSE 5260
// enable else
5257: ENABLE
5258: GO 5261
// disable ;
5260: DISABLE
// end ;
5261: PPOPN 2
5263: END
// every 0 0$1 trigger IsPlaced ( Bowl ) do var un ;
5264: LD_EXP 34
5268: PPUSH
5269: CALL_OW 305
5273: IFFALSE 5391
5275: GO 5277
5277: DISABLE
5278: LD_INT 0
5280: PPUSH
// begin for un in group_Pows do
5281: LD_ADDR_VAR 0 1
5285: PUSH
5286: LD_EXP 7
5290: PUSH
5291: FOR_IN
5292: IFFALSE 5388
// begin if GetSide ( un ) = side_rus2 and GetY ( un ) < 27 then
5294: LD_VAR 0 1
5298: PPUSH
5299: CALL_OW 255
5303: PUSH
5304: LD_EXP 5
5308: EQUAL
5309: PUSH
5310: LD_VAR 0 1
5314: PPUSH
5315: CALL_OW 251
5319: PUSH
5320: LD_INT 27
5322: LESS
5323: AND
5324: IFFALSE 5386
// begin if un = Bowl then
5326: LD_VAR 0 1
5330: PUSH
5331: LD_EXP 34
5335: EQUAL
5336: IFFALSE 5341
// disable ( 001 ) ;
5338: LD_INT 1
5340: DISABLE_MARKED
// ComEnterUnit ( un , RuDep ) ;
5341: LD_VAR 0 1
5345: PPUSH
5346: LD_INT 3
5348: PPUSH
5349: CALL_OW 120
// SetSide ( un , side_rus ) ;
5353: LD_VAR 0 1
5357: PPUSH
5358: LD_EXP 3
5362: PPUSH
5363: CALL_OW 235
// group_PowsInDep := group_PowsInDep ^ [ un ] ;
5367: LD_ADDR_EXP 12
5371: PUSH
5372: LD_EXP 12
5376: PUSH
5377: LD_VAR 0 1
5381: PUSH
5382: EMPTY
5383: LIST
5384: ADD
5385: ST_TO_ADDR
// end ; end ;
5386: GO 5291
5388: POP
5389: POP
// enable ;
5390: ENABLE
// end ;
5391: PPOPN 1
5393: END
// every 0 0$3 trigger IsPlaced ( Bowl ) and AreAlive ( group_ConUnits ) = false marked 001 do var un ;
5394: LD_EXP 34
5398: PPUSH
5399: CALL_OW 305
5403: PUSH
5404: LD_EXP 11
5408: PPUSH
5409: CALL 8514 0 1
5413: PUSH
5414: LD_INT 0
5416: EQUAL
5417: AND
5418: IFFALSE 5630
5420: GO 5422
5422: DISABLE
5423: LD_INT 0
5425: PPUSH
// begin for un in group_Pows do
5426: LD_ADDR_VAR 0 1
5430: PUSH
5431: LD_EXP 7
5435: PUSH
5436: FOR_IN
5437: IFFALSE 5474
// begin SetSide ( un , side_player ) ;
5439: LD_VAR 0 1
5443: PPUSH
5444: LD_EXP 2
5448: PPUSH
5449: CALL_OW 235
// group_Heike := group_Heike ^ [ un ] ;
5453: LD_ADDR_EXP 6
5457: PUSH
5458: LD_EXP 6
5462: PUSH
5463: LD_VAR 0 1
5467: PUSH
5468: EMPTY
5469: LIST
5470: ADD
5471: ST_TO_ADDR
// end ;
5472: GO 5436
5474: POP
5475: POP
// PowsSaved := true ;
5476: LD_ADDR_EXP 46
5480: PUSH
5481: LD_INT 1
5483: ST_TO_ADDR
// wait ( 0 0$1 ) ;
5484: LD_INT 35
5486: PPUSH
5487: CALL_OW 67
// InGameOn ;
5491: CALL_OW 8
// CenterOnUnits ( Bowl ) ;
5495: LD_EXP 34
5499: PPUSH
5500: CALL_OW 85
// wait ( 0 0$0.7 ) ;
5504: LD_INT 24
5506: PPUSH
5507: CALL_OW 67
// Say ( Bowl , D5a-Bow-1 ) ;
5511: LD_EXP 34
5515: PPUSH
5516: LD_STRING D5a-Bow-1
5518: PPUSH
5519: CALL_OW 88
// if Rozier and IsOk ( Rozier ) then
5523: LD_EXP 29
5527: PUSH
5528: LD_EXP 29
5532: PPUSH
5533: CALL_OW 302
5537: AND
5538: IFFALSE 5552
// Say ( Rozier , D5a-Roz-1 ) ;
5540: LD_EXP 29
5544: PPUSH
5545: LD_STRING D5a-Roz-1
5547: PPUSH
5548: CALL_OW 88
// Say ( Heike , D5a-Heike-1 ) ;
5552: LD_EXP 27
5556: PPUSH
5557: LD_STRING D5a-Heike-1
5559: PPUSH
5560: CALL_OW 88
// Say ( Bowl , D5a-Bow-2 ) ;
5564: LD_EXP 34
5568: PPUSH
5569: LD_STRING D5a-Bow-2
5571: PPUSH
5572: CALL_OW 88
// Say ( Heike , D5a-Heike-2 ) ;
5576: LD_EXP 27
5580: PPUSH
5581: LD_STRING D5a-Heike-2
5583: PPUSH
5584: CALL_OW 88
// Say ( Bowl , D5a-Bow-3 ) ;
5588: LD_EXP 34
5592: PPUSH
5593: LD_STRING D5a-Bow-3
5595: PPUSH
5596: CALL_OW 88
// Say ( Heike , D5a-Heike-3 ) ;
5600: LD_EXP 27
5604: PPUSH
5605: LD_STRING D5a-Heike-3
5607: PPUSH
5608: CALL_OW 88
// InGameOff ;
5612: CALL_OW 9
// ChangeMissionObjectives ( M3-out ) ;
5616: LD_STRING M3-out
5618: PPUSH
5619: CALL_OW 337
// ChangeMissionObjectives ( M4 ) ;
5623: LD_STRING M4
5625: PPUSH
5626: CALL_OW 337
// end ;
5630: PPOPN 1
5632: END
// every 0 0$0.5 trigger GetLives ( RuDep ) <= 250 and GetSide ( Bowl ) <> side_player do var un ;
5633: LD_INT 3
5635: PPUSH
5636: CALL_OW 256
5640: PUSH
5641: LD_INT 250
5643: LESSEQUAL
5644: PUSH
5645: LD_EXP 34
5649: PPUSH
5650: CALL_OW 255
5654: PUSH
5655: LD_EXP 2
5659: NONEQUAL
5660: AND
5661: IFFALSE 5878
5663: GO 5665
5665: DISABLE
5666: LD_INT 0
5668: PPUSH
// begin for un in group_Pows do
5669: LD_ADDR_VAR 0 1
5673: PUSH
5674: LD_EXP 7
5678: PUSH
5679: FOR_IN
5680: IFFALSE 5717
// begin SetSide ( un , side_player ) ;
5682: LD_VAR 0 1
5686: PPUSH
5687: LD_EXP 2
5691: PPUSH
5692: CALL_OW 235
// group_Heike := group_Heike ^ [ un ] ;
5696: LD_ADDR_EXP 6
5700: PUSH
5701: LD_EXP 6
5705: PUSH
5706: LD_VAR 0 1
5710: PUSH
5711: EMPTY
5712: LIST
5713: ADD
5714: ST_TO_ADDR
// end ;
5715: GO 5679
5717: POP
5718: POP
// PowsSaved := true ;
5719: LD_ADDR_EXP 46
5723: PUSH
5724: LD_INT 1
5726: ST_TO_ADDR
// InGameOn ;
5727: CALL_OW 8
// CenterOnUnits ( Bowl ) ;
5731: LD_EXP 34
5735: PPUSH
5736: CALL_OW 85
// wait ( 0 0$0.7 ) ;
5740: LD_INT 24
5742: PPUSH
5743: CALL_OW 67
// Say ( Bowl , D5b-Bow-1 ) ;
5747: LD_EXP 34
5751: PPUSH
5752: LD_STRING D5b-Bow-1
5754: PPUSH
5755: CALL_OW 88
// Say ( Heike , D5b-Heike-1 ) ;
5759: LD_EXP 27
5763: PPUSH
5764: LD_STRING D5b-Heike-1
5766: PPUSH
5767: CALL_OW 88
// Say ( Bowl , D5a-Bow-2 ) ;
5771: LD_EXP 34
5775: PPUSH
5776: LD_STRING D5a-Bow-2
5778: PPUSH
5779: CALL_OW 88
// Say ( Heike , D5b-Heike-2 ) ;
5783: LD_EXP 27
5787: PPUSH
5788: LD_STRING D5b-Heike-2
5790: PPUSH
5791: CALL_OW 88
// wait ( 0 0$0.5 ) ;
5795: LD_INT 18
5797: PPUSH
5798: CALL_OW 67
// if Rozier and IsOk ( Rozier ) then
5802: LD_EXP 29
5806: PUSH
5807: LD_EXP 29
5811: PPUSH
5812: CALL_OW 302
5816: AND
5817: IFFALSE 5831
// Say ( Rozier , D5b-Roz-1 ) ;
5819: LD_EXP 29
5823: PPUSH
5824: LD_STRING D5b-Roz-1
5826: PPUSH
5827: CALL_OW 88
// if Harwood and IsOk ( Harwood ) then
5831: LD_EXP 28
5835: PUSH
5836: LD_EXP 28
5840: PPUSH
5841: CALL_OW 302
5845: AND
5846: IFFALSE 5860
// Say ( Harwood , D5b-Har-1 ) ;
5848: LD_EXP 28
5852: PPUSH
5853: LD_STRING D5b-Har-1
5855: PPUSH
5856: CALL_OW 88
// InGameOff ;
5860: CALL_OW 9
// ChangeMissionObjectives ( M3-out ) ;
5864: LD_STRING M3-out
5866: PPUSH
5867: CALL_OW 337
// ChangeMissionObjectives ( M4 ) ;
5871: LD_STRING M4
5873: PPUSH
5874: CALL_OW 337
// end ; end_of_file
5878: PPOPN 1
5880: END
// export RuBrwSol , RuBunSol , RuLabScis , RuNeedHelp ; export function RussiansOnTheMap ( ) ; var i , un ; begin
5881: LD_INT 0
5883: PPUSH
5884: PPUSH
5885: PPUSH
// uc_side := side_rus ;
5886: LD_ADDR_OWVAR 20
5890: PUSH
5891: LD_EXP 3
5895: ST_TO_ADDR
// uc_nation := nation_russian ;
5896: LD_ADDR_OWVAR 21
5900: PUSH
5901: LD_INT 3
5903: ST_TO_ADDR
// InItHc ( ) ;
5904: CALL_OW 19
// for i := 1 to [ 1 , 1 , 2 ] [ Difficulty ] do
5908: LD_ADDR_VAR 0 2
5912: PUSH
5913: DOUBLE
5914: LD_INT 1
5916: DEC
5917: ST_TO_ADDR
5918: LD_INT 1
5920: PUSH
5921: LD_INT 1
5923: PUSH
5924: LD_INT 2
5926: PUSH
5927: EMPTY
5928: LIST
5929: LIST
5930: LIST
5931: PUSH
5932: LD_OWVAR 67
5936: ARRAY
5937: PUSH
5938: FOR_TO
5939: IFFALSE 5981
// begin PrepareEngineer ( RandSex ( 20 ) , rand ( 1 , 3 ) ) ;
5941: LD_INT 20
5943: PPUSH
5944: CALL 7482 0 1
5948: PPUSH
5949: LD_INT 1
5951: PPUSH
5952: LD_INT 3
5954: PPUSH
5955: CALL_OW 12
5959: PPUSH
5960: CALL_OW 382
// PlaceUnitArea ( CreateHuman ( ) , _RuBase , false ) ;
5964: CALL_OW 44
5968: PPUSH
5969: LD_INT 8
5971: PPUSH
5972: LD_INT 0
5974: PPUSH
5975: CALL_OW 49
// end ;
5979: GO 5938
5981: POP
5982: POP
// CrewOfRussianBuilding ( [ 2 , 3 , 3 ] [ Difficulty ] , class_scientistic , 2 , b_lab_half ) ;
5983: LD_INT 2
5985: PUSH
5986: LD_INT 3
5988: PUSH
5989: LD_INT 3
5991: PUSH
5992: EMPTY
5993: LIST
5994: LIST
5995: LIST
5996: PUSH
5997: LD_OWVAR 67
6001: ARRAY
6002: PPUSH
6003: LD_INT 4
6005: PPUSH
6006: LD_INT 2
6008: PPUSH
6009: LD_INT 7
6011: PPUSH
6012: CALL 6219 0 4
// CrewOfRussianBuilding ( 3 , class_mechanic , diff_RuMecs_skill , b_factory ) ;
6016: LD_INT 3
6018: PPUSH
6019: LD_INT 3
6021: PPUSH
6022: LD_EXP 21
6026: PPUSH
6027: LD_INT 3
6029: PPUSH
6030: CALL 6219 0 4
// CrewOfRussianBuilding ( [ 2 , 2 , 3 ] [ Difficulty ] , class_soldier , diff_RuSols_skill , b_armoury ) ;
6034: LD_INT 2
6036: PUSH
6037: LD_INT 2
6039: PUSH
6040: LD_INT 3
6042: PUSH
6043: EMPTY
6044: LIST
6045: LIST
6046: LIST
6047: PUSH
6048: LD_OWVAR 67
6052: ARRAY
6053: PPUSH
6054: LD_INT 1
6056: PPUSH
6057: LD_EXP 20
6061: PPUSH
6062: LD_INT 4
6064: PPUSH
6065: CALL 6219 0 4
// CrewOfRussianBuilding ( 1 , class_soldier , diff_RuSols_skill , b_bunker ) ;
6069: LD_INT 1
6071: PPUSH
6072: LD_INT 1
6074: PPUSH
6075: LD_EXP 20
6079: PPUSH
6080: LD_INT 32
6082: PPUSH
6083: CALL 6219 0 4
// CrewOfRussianBuilding ( 1 , class_soldier , diff_RuSols_skill , b_breastwork ) ;
6087: LD_INT 1
6089: PPUSH
6090: LD_INT 1
6092: PPUSH
6093: LD_EXP 20
6097: PPUSH
6098: LD_INT 31
6100: PPUSH
6101: CALL 6219 0 4
// for i := 1 to diff_PtUnits_count do
6105: LD_ADDR_VAR 0 2
6109: PUSH
6110: DOUBLE
6111: LD_INT 1
6113: DEC
6114: ST_TO_ADDR
6115: LD_EXP 23
6119: PUSH
6120: FOR_TO
6121: IFFALSE 6186
// begin PrepareSoldier ( RandSex ( 20 ) , diff_RuSols_skill ) ;
6123: LD_INT 20
6125: PPUSH
6126: CALL 7482 0 1
6130: PPUSH
6131: LD_EXP 20
6135: PPUSH
6136: CALL_OW 381
// un := CreateHuman ( ) ;
6140: LD_ADDR_VAR 0 3
6144: PUSH
6145: CALL_OW 44
6149: ST_TO_ADDR
// patrol_Units := patrol_Units ^ [ un ] ;
6150: LD_ADDR_EXP 13
6154: PUSH
6155: LD_EXP 13
6159: PUSH
6160: LD_VAR 0 3
6164: PUSH
6165: EMPTY
6166: LIST
6167: ADD
6168: ST_TO_ADDR
// PlaceUnitArea ( un , _PatrolStart , false ) ;
6169: LD_VAR 0 3
6173: PPUSH
6174: LD_INT 9
6176: PPUSH
6177: LD_INT 0
6179: PPUSH
6180: CALL_OW 49
// end ;
6184: GO 6120
6186: POP
6187: POP
// RuBrwSol := UnitsInSide ( RuBrw ) ;
6188: LD_ADDR_EXP 52
6192: PUSH
6193: LD_INT 5
6195: PPUSH
6196: CALL_OW 313
6200: ST_TO_ADDR
// RuBunSol := UnitsInSide ( RuBun ) ;
6201: LD_ADDR_EXP 53
6205: PUSH
6206: LD_INT 9
6208: PPUSH
6209: CALL_OW 313
6213: ST_TO_ADDR
// end ;
6214: LD_VAR 0 1
6218: RET
// export function CrewOfRussianBuilding ( count , cl , sk , btype ) ; var b , i , un , units ; begin
6219: LD_INT 0
6221: PPUSH
6222: PPUSH
6223: PPUSH
6224: PPUSH
6225: PPUSH
// uc_side := side_rus ;
6226: LD_ADDR_OWVAR 20
6230: PUSH
6231: LD_EXP 3
6235: ST_TO_ADDR
// uc_nation := nation_russian ;
6236: LD_ADDR_OWVAR 21
6240: PUSH
6241: LD_INT 3
6243: ST_TO_ADDR
// InitHc ( ) ;
6244: CALL_OW 19
// units := [ ] ;
6248: LD_ADDR_VAR 0 9
6252: PUSH
6253: EMPTY
6254: ST_TO_ADDR
// for i := 1 to count do
6255: LD_ADDR_VAR 0 7
6259: PUSH
6260: DOUBLE
6261: LD_INT 1
6263: DEC
6264: ST_TO_ADDR
6265: LD_VAR 0 1
6269: PUSH
6270: FOR_TO
6271: IFFALSE 6477
// begin case cl of 1 :
6273: LD_VAR 0 2
6277: PUSH
6278: LD_INT 1
6280: DOUBLE
6281: EQUAL
6282: IFTRUE 6286
6284: GO 6306
6286: POP
// PrepareSoldier ( RandSex ( 20 ) , sk ) ; 2 :
6287: LD_INT 20
6289: PPUSH
6290: CALL 7482 0 1
6294: PPUSH
6295: LD_VAR 0 3
6299: PPUSH
6300: CALL_OW 381
6304: GO 6391
6306: LD_INT 2
6308: DOUBLE
6309: EQUAL
6310: IFTRUE 6314
6312: GO 6334
6314: POP
// PrepareEngineer ( RandSex ( 25 ) , sk ) ; 3 :
6315: LD_INT 25
6317: PPUSH
6318: CALL 7482 0 1
6322: PPUSH
6323: LD_VAR 0 3
6327: PPUSH
6328: CALL_OW 382
6332: GO 6391
6334: LD_INT 3
6336: DOUBLE
6337: EQUAL
6338: IFTRUE 6342
6340: GO 6362
6342: POP
// PrepareMechanic ( RandSex ( 25 ) , sk ) ; 4 :
6343: LD_INT 25
6345: PPUSH
6346: CALL 7482 0 1
6350: PPUSH
6351: LD_VAR 0 3
6355: PPUSH
6356: CALL_OW 383
6360: GO 6391
6362: LD_INT 4
6364: DOUBLE
6365: EQUAL
6366: IFTRUE 6370
6368: GO 6390
6370: POP
// PrepareScientist ( RandSex ( 50 ) , sk ) ; end ;
6371: LD_INT 50
6373: PPUSH
6374: CALL 7482 0 1
6378: PPUSH
6379: LD_VAR 0 3
6383: PPUSH
6384: CALL_OW 384
6388: GO 6391
6390: POP
// for b in FilterAllUnits ( [ [ f_side , side_rus ] , [ f_btype , btype ] ] ) do
6391: LD_ADDR_VAR 0 6
6395: PUSH
6396: LD_INT 22
6398: PUSH
6399: LD_EXP 3
6403: PUSH
6404: EMPTY
6405: LIST
6406: LIST
6407: PUSH
6408: LD_INT 30
6410: PUSH
6411: LD_VAR 0 4
6415: PUSH
6416: EMPTY
6417: LIST
6418: LIST
6419: PUSH
6420: EMPTY
6421: LIST
6422: LIST
6423: PPUSH
6424: CALL_OW 69
6428: PUSH
6429: FOR_IN
6430: IFFALSE 6457
// if GetBType ( b ) = b_breastwork then
6432: LD_VAR 0 6
6436: PPUSH
6437: CALL_OW 266
6441: PUSH
6442: LD_INT 31
6444: EQUAL
6445: IFFALSE 6455
// uc_direction := 3 ;
6447: LD_ADDR_OWVAR 24
6451: PUSH
6452: LD_INT 3
6454: ST_TO_ADDR
6455: GO 6429
6457: POP
6458: POP
// units := units ^ CreateHuman ( ) ;
6459: LD_ADDR_VAR 0 9
6463: PUSH
6464: LD_VAR 0 9
6468: PUSH
6469: CALL_OW 44
6473: ADD
6474: ST_TO_ADDR
// end ;
6475: GO 6270
6477: POP
6478: POP
// for b in FilterAllUnits ( [ [ f_side , side_rus ] , [ f_btype , btype ] ] ) do
6479: LD_ADDR_VAR 0 6
6483: PUSH
6484: LD_INT 22
6486: PUSH
6487: LD_EXP 3
6491: PUSH
6492: EMPTY
6493: LIST
6494: LIST
6495: PUSH
6496: LD_INT 30
6498: PUSH
6499: LD_VAR 0 4
6503: PUSH
6504: EMPTY
6505: LIST
6506: LIST
6507: PUSH
6508: EMPTY
6509: LIST
6510: LIST
6511: PPUSH
6512: CALL_OW 69
6516: PUSH
6517: FOR_IN
6518: IFFALSE 6553
// for un in units do
6520: LD_ADDR_VAR 0 8
6524: PUSH
6525: LD_VAR 0 9
6529: PUSH
6530: FOR_IN
6531: IFFALSE 6549
// PlaceHumanInUnit ( CreateHuman ( ) , b ) ;
6533: CALL_OW 44
6537: PPUSH
6538: LD_VAR 0 6
6542: PPUSH
6543: CALL_OW 52
6547: GO 6530
6549: POP
6550: POP
6551: GO 6517
6553: POP
6554: POP
// end ;
6555: LD_VAR 0 5
6559: RET
// every 0 0$1 do
6560: GO 6562
6562: DISABLE
// begin patrol_Way := [ [ 77 , 21 ] , [ 69 , 20 ] , [ 63 , 19 ] , [ 56 , 10 ] , [ 61 , 4 ] , [ 75 , 10 ] , [ 88 , 9 ] ] ;
6563: LD_ADDR_EXP 14
6567: PUSH
6568: LD_INT 77
6570: PUSH
6571: LD_INT 21
6573: PUSH
6574: EMPTY
6575: LIST
6576: LIST
6577: PUSH
6578: LD_INT 69
6580: PUSH
6581: LD_INT 20
6583: PUSH
6584: EMPTY
6585: LIST
6586: LIST
6587: PUSH
6588: LD_INT 63
6590: PUSH
6591: LD_INT 19
6593: PUSH
6594: EMPTY
6595: LIST
6596: LIST
6597: PUSH
6598: LD_INT 56
6600: PUSH
6601: LD_INT 10
6603: PUSH
6604: EMPTY
6605: LIST
6606: LIST
6607: PUSH
6608: LD_INT 61
6610: PUSH
6611: LD_INT 4
6613: PUSH
6614: EMPTY
6615: LIST
6616: LIST
6617: PUSH
6618: LD_INT 75
6620: PUSH
6621: LD_INT 10
6623: PUSH
6624: EMPTY
6625: LIST
6626: LIST
6627: PUSH
6628: LD_INT 88
6630: PUSH
6631: LD_INT 9
6633: PUSH
6634: EMPTY
6635: LIST
6636: LIST
6637: PUSH
6638: EMPTY
6639: LIST
6640: LIST
6641: LIST
6642: LIST
6643: LIST
6644: LIST
6645: LIST
6646: ST_TO_ADDR
// Patrol ( patrol_Units , patrol_Way , 0 0$4 ) ;
6647: LD_EXP 13
6651: PPUSH
6652: LD_EXP 14
6656: PPUSH
6657: LD_INT 140
6659: PPUSH
6660: CALL 8183 0 3
// end ;
6664: END
// export function Speakers ( ) ; var i , units ; begin
6665: LD_INT 0
6667: PPUSH
6668: PPUSH
6669: PPUSH
// uc_side := side_rus ;
6670: LD_ADDR_OWVAR 20
6674: PUSH
6675: LD_EXP 3
6679: ST_TO_ADDR
// uc_nation := nation_russian ;
6680: LD_ADDR_OWVAR 21
6684: PUSH
6685: LD_INT 3
6687: ST_TO_ADDR
// InitHc ( ) ;
6688: CALL_OW 19
// units := [ ] ;
6692: LD_ADDR_VAR 0 3
6696: PUSH
6697: EMPTY
6698: ST_TO_ADDR
// for i := 1 to 2 do
6699: LD_ADDR_VAR 0 2
6703: PUSH
6704: DOUBLE
6705: LD_INT 1
6707: DEC
6708: ST_TO_ADDR
6709: LD_INT 2
6711: PUSH
6712: FOR_TO
6713: IFFALSE 6743
// begin PrepareSoldier ( sex_male , 0 ) ;
6715: LD_INT 1
6717: PPUSH
6718: LD_INT 0
6720: PPUSH
6721: CALL_OW 381
// units := units ^ CreateHuman ( ) ;
6725: LD_ADDR_VAR 0 3
6729: PUSH
6730: LD_VAR 0 3
6734: PUSH
6735: CALL_OW 44
6739: ADD
6740: ST_TO_ADDR
// end ;
6741: GO 6712
6743: POP
6744: POP
// result := units ;
6745: LD_ADDR_VAR 0 1
6749: PUSH
6750: LD_VAR 0 3
6754: ST_TO_ADDR
// end ;
6755: LD_VAR 0 1
6759: RET
// export function ConvoyUnits ( ) ; var i , ConUnits , veh ; begin
6760: LD_INT 0
6762: PPUSH
6763: PPUSH
6764: PPUSH
6765: PPUSH
// uc_side := side_rus ;
6766: LD_ADDR_OWVAR 20
6770: PUSH
6771: LD_EXP 3
6775: ST_TO_ADDR
// uc_nation := nation_russian ;
6776: LD_ADDR_OWVAR 21
6780: PUSH
6781: LD_INT 3
6783: ST_TO_ADDR
// uc_direction := [ 0 , 5 ] [ rand ( 1 , 2 ) ] ;
6784: LD_ADDR_OWVAR 24
6788: PUSH
6789: LD_INT 0
6791: PUSH
6792: LD_INT 5
6794: PUSH
6795: EMPTY
6796: LIST
6797: LIST
6798: PUSH
6799: LD_INT 1
6801: PPUSH
6802: LD_INT 2
6804: PPUSH
6805: CALL_OW 12
6809: ARRAY
6810: ST_TO_ADDR
// for i := 1 to diff_ConSolsCount do
6811: LD_ADDR_VAR 0 2
6815: PUSH
6816: DOUBLE
6817: LD_INT 1
6819: DEC
6820: ST_TO_ADDR
6821: LD_EXP 22
6825: PUSH
6826: FOR_TO
6827: IFFALSE 6864
// begin PrepareSoldier ( RandSex ( 25 ) , diff_RuSols_skill ) ;
6829: LD_INT 25
6831: PPUSH
6832: CALL 7482 0 1
6836: PPUSH
6837: LD_EXP 20
6841: PPUSH
6842: CALL_OW 381
// ConUnits := ConUnits ^ CreateHuman ( ) ;
6846: LD_ADDR_VAR 0 3
6850: PUSH
6851: LD_VAR 0 3
6855: PUSH
6856: CALL_OW 44
6860: ADD
6861: ST_TO_ADDR
// end ;
6862: GO 6826
6864: POP
6865: POP
// if Difficulty > 1 then
6866: LD_OWVAR 67
6870: PUSH
6871: LD_INT 1
6873: GREATER
6874: IFFALSE 7009
// begin PrepareScientist ( RandSex ( 0 ) , Difficulty ) ;
6876: LD_INT 0
6878: PPUSH
6879: CALL 7482 0 1
6883: PPUSH
6884: LD_OWVAR 67
6888: PPUSH
6889: CALL_OW 384
// ConUnits := ConUnits ^ CreateHuman ( ) ;
6893: LD_ADDR_VAR 0 3
6897: PUSH
6898: LD_VAR 0 3
6902: PUSH
6903: CALL_OW 44
6907: ADD
6908: ST_TO_ADDR
// vc_chassis := ru_medium_wheeled ;
6909: LD_ADDR_OWVAR 37
6913: PUSH
6914: LD_INT 21
6916: ST_TO_ADDR
// vc_control := control_manual ;
6917: LD_ADDR_OWVAR 38
6921: PUSH
6922: LD_INT 1
6924: ST_TO_ADDR
// vc_engine := engine_combustion ;
6925: LD_ADDR_OWVAR 39
6929: PUSH
6930: LD_INT 1
6932: ST_TO_ADDR
// vc_weapon := ru_heavy_machine_gun ;
6933: LD_ADDR_OWVAR 40
6937: PUSH
6938: LD_INT 42
6940: ST_TO_ADDR
// vc_fuel_battery := 85 ;
6941: LD_ADDR_OWVAR 41
6945: PUSH
6946: LD_INT 85
6948: ST_TO_ADDR
// veh := CreateVehicle ( ) ;
6949: LD_ADDR_VAR 0 4
6953: PUSH
6954: CALL_OW 45
6958: ST_TO_ADDR
// ConUnits := ConUnits ^ [ veh ] ;
6959: LD_ADDR_VAR 0 3
6963: PUSH
6964: LD_VAR 0 3
6968: PUSH
6969: LD_VAR 0 4
6973: PUSH
6974: EMPTY
6975: LIST
6976: ADD
6977: ST_TO_ADDR
// PrepareMechanic ( RandSex ( 75 ) , Difficulty ) ;
6978: LD_INT 75
6980: PPUSH
6981: CALL 7482 0 1
6985: PPUSH
6986: LD_OWVAR 67
6990: PPUSH
6991: CALL_OW 383
// PlaceHumanInUnit ( CreateHuman ( ) , veh ) ;
6995: CALL_OW 44
6999: PPUSH
7000: LD_VAR 0 4
7004: PPUSH
7005: CALL_OW 52
// end ; group_ConUnits := ConUnits ;
7009: LD_ADDR_EXP 11
7013: PUSH
7014: LD_VAR 0 3
7018: ST_TO_ADDR
// end ;
7019: LD_VAR 0 1
7023: RET
// every 0 0$3 trigger GetListOfCratesInArea ( _RuBase ) do var un , CratesList , engs ;
7024: LD_INT 8
7026: PPUSH
7027: CALL_OW 435
7031: IFFALSE 7158
7033: GO 7035
7035: DISABLE
7036: LD_INT 0
7038: PPUSH
7039: PPUSH
7040: PPUSH
// begin CratesList := GetListOfCratesInArea ( _RuBase ) ;
7041: LD_ADDR_VAR 0 2
7045: PUSH
7046: LD_INT 8
7048: PPUSH
7049: CALL_OW 435
7053: ST_TO_ADDR
// engs := FilterAllUnits ( [ [ f_side , side_rus ] , [ f_class , class_engineer ] ] ) ;
7054: LD_ADDR_VAR 0 3
7058: PUSH
7059: LD_INT 22
7061: PUSH
7062: LD_EXP 3
7066: PUSH
7067: EMPTY
7068: LIST
7069: LIST
7070: PUSH
7071: LD_INT 25
7073: PUSH
7074: LD_INT 2
7076: PUSH
7077: EMPTY
7078: LIST
7079: LIST
7080: PUSH
7081: EMPTY
7082: LIST
7083: LIST
7084: PPUSH
7085: CALL_OW 69
7089: ST_TO_ADDR
// for un in engs do
7090: LD_ADDR_VAR 0 1
7094: PUSH
7095: LD_VAR 0 3
7099: PUSH
7100: FOR_IN
7101: IFFALSE 7155
// begin if not HasTask ( un ) and IsOK ( un ) then
7103: LD_VAR 0 1
7107: PPUSH
7108: CALL_OW 314
7112: NOT
7113: PUSH
7114: LD_VAR 0 1
7118: PPUSH
7119: CALL_OW 302
7123: AND
7124: IFFALSE 7153
// ComCollect ( un , CratesList [ 1 ] , CratesList [ 2 ] ) ;
7126: LD_VAR 0 1
7130: PPUSH
7131: LD_VAR 0 2
7135: PUSH
7136: LD_INT 1
7138: ARRAY
7139: PPUSH
7140: LD_VAR 0 2
7144: PUSH
7145: LD_INT 2
7147: ARRAY
7148: PPUSH
7149: CALL_OW 117
// end ;
7153: GO 7100
7155: POP
7156: POP
// enable ;
7157: ENABLE
// end ;
7158: PPOPN 3
7160: END
// every 0 0$1 do var un , sci , toHeal ; var needHelp ;
7161: GO 7163
7163: DISABLE
7164: LD_INT 0
7166: PPUSH
7167: PPUSH
7168: PPUSH
7169: PPUSH
// begin toHeal := FilterUnitsInArea ( _RusHealArea , [ [ f_side , side_rus ] , [ f_type , unit_human ] ] ) ;
7170: LD_ADDR_VAR 0 3
7174: PUSH
7175: LD_INT 20
7177: PPUSH
7178: LD_INT 22
7180: PUSH
7181: LD_EXP 3
7185: PUSH
7186: EMPTY
7187: LIST
7188: LIST
7189: PUSH
7190: LD_INT 21
7192: PUSH
7193: LD_INT 1
7195: PUSH
7196: EMPTY
7197: LIST
7198: LIST
7199: PUSH
7200: EMPTY
7201: LIST
7202: LIST
7203: PPUSH
7204: CALL_OW 70
7208: ST_TO_ADDR
// sci := FilterAllUnits ( [ [ f_nation , nation_russian ] , [ f_class , class_scientistic ] ] ) ;
7209: LD_ADDR_VAR 0 2
7213: PUSH
7214: LD_INT 23
7216: PUSH
7217: LD_INT 3
7219: PUSH
7220: EMPTY
7221: LIST
7222: LIST
7223: PUSH
7224: LD_INT 25
7226: PUSH
7227: LD_INT 4
7229: PUSH
7230: EMPTY
7231: LIST
7232: LIST
7233: PUSH
7234: EMPTY
7235: LIST
7236: LIST
7237: PPUSH
7238: CALL_OW 69
7242: ST_TO_ADDR
// if needHelp = [ ] then
7243: LD_VAR 0 4
7247: PUSH
7248: EMPTY
7249: EQUAL
7250: IFFALSE 7259
// needHelp := [ ] ;
7252: LD_ADDR_VAR 0 4
7256: PUSH
7257: EMPTY
7258: ST_TO_ADDR
// for un in toHeal do
7259: LD_ADDR_VAR 0 1
7263: PUSH
7264: LD_VAR 0 3
7268: PUSH
7269: FOR_IN
7270: IFFALSE 7308
// begin if GetLives ( un ) < 600 then
7272: LD_VAR 0 1
7276: PPUSH
7277: CALL_OW 256
7281: PUSH
7282: LD_INT 600
7284: LESS
7285: IFFALSE 7306
// needHelp := needHelp ^ [ un ] ;
7287: LD_ADDR_VAR 0 4
7291: PUSH
7292: LD_VAR 0 4
7296: PUSH
7297: LD_VAR 0 1
7301: PUSH
7302: EMPTY
7303: LIST
7304: ADD
7305: ST_TO_ADDR
// end ;
7306: GO 7269
7308: POP
7309: POP
// if GetLives ( RuBrw ) <= 250 then
7310: LD_INT 5
7312: PPUSH
7313: CALL_OW 256
7317: PUSH
7318: LD_INT 250
7320: LESSEQUAL
7321: IFFALSE 7370
// if IsOk ( RuArm ) then
7323: LD_INT 23
7325: PPUSH
7326: CALL_OW 302
7330: IFFALSE 7346
// ComEnterUnit ( RuBrwSol , RuArm ) else
7332: LD_EXP 52
7336: PPUSH
7337: LD_INT 23
7339: PPUSH
7340: CALL_OW 120
7344: GO 7370
// begin ComMoveXY ( RuBrwSol , 102 , 22 ) ;
7346: LD_EXP 52
7350: PPUSH
7351: LD_INT 102
7353: PPUSH
7354: LD_INT 22
7356: PPUSH
7357: CALL_OW 111
// AddComCrawl ( RuBrwSol ) ;
7361: LD_EXP 52
7365: PPUSH
7366: CALL_OW 197
// end ; if GetLives ( RuBun ) <= 250 then
7370: LD_INT 9
7372: PPUSH
7373: CALL_OW 256
7377: PUSH
7378: LD_INT 250
7380: LESSEQUAL
7381: IFFALSE 7430
// if IsOk ( RuArm ) then
7383: LD_INT 23
7385: PPUSH
7386: CALL_OW 302
7390: IFFALSE 7406
// ComEnterUnit ( RuBunSol , RuArm ) else
7392: LD_EXP 53
7396: PPUSH
7397: LD_INT 23
7399: PPUSH
7400: CALL_OW 120
7404: GO 7430
// begin ComMoveXY ( RuBunSol , 78 , 4 ) ;
7406: LD_EXP 53
7410: PPUSH
7411: LD_INT 78
7413: PPUSH
7414: LD_INT 4
7416: PPUSH
7417: CALL_OW 111
// AddComCrawl ( RuBunSol ) ;
7421: LD_EXP 53
7425: PPUSH
7426: CALL_OW 197
// end ; enable ;
7430: ENABLE
// end ; end_of_file
7431: PPOPN 4
7433: END
// export function ImportCharacter ( ident , variable ) ; var un ; begin
7434: LD_INT 0
7436: PPUSH
7437: PPUSH
// if ( not variable ) then
7438: LD_VAR 0 2
7442: NOT
7443: IFFALSE 7462
// result := NewCharacter ( ident ) else
7445: LD_ADDR_VAR 0 3
7449: PUSH
7450: LD_VAR 0 1
7454: PPUSH
7455: CALL_OW 25
7459: ST_TO_ADDR
7460: GO 7477
// result := CreateCharacter ( ident ) ;
7462: LD_ADDR_VAR 0 3
7466: PUSH
7467: LD_VAR 0 1
7471: PPUSH
7472: CALL_OW 34
7476: ST_TO_ADDR
// end ;
7477: LD_VAR 0 3
7481: RET
// export function RandSex ( p ) ; begin
7482: LD_INT 0
7484: PPUSH
// if Prob ( p ) then
7485: LD_VAR 0 1
7489: PPUSH
7490: CALL_OW 13
7494: IFFALSE 7506
// result := sex_female else
7496: LD_ADDR_VAR 0 2
7500: PUSH
7501: LD_INT 2
7503: ST_TO_ADDR
7504: GO 7514
// result := sex_male ;
7506: LD_ADDR_VAR 0 2
7510: PUSH
7511: LD_INT 1
7513: ST_TO_ADDR
// end ;
7514: LD_VAR 0 2
7518: RET
// export function ImportVehicles ( list ) ; var i ; begin
7519: LD_INT 0
7521: PPUSH
7522: PPUSH
// for i := 1 to list do
7523: LD_ADDR_VAR 0 3
7527: PUSH
7528: DOUBLE
7529: LD_INT 1
7531: DEC
7532: ST_TO_ADDR
7533: LD_VAR 0 1
7537: PUSH
7538: FOR_TO
7539: IFFALSE 7684
// begin uc_side := side_player ;
7541: LD_ADDR_OWVAR 20
7545: PUSH
7546: LD_EXP 2
7550: ST_TO_ADDR
// uc_nation := list [ i ] [ 5 ] ;
7551: LD_ADDR_OWVAR 21
7555: PUSH
7556: LD_VAR 0 1
7560: PUSH
7561: LD_VAR 0 3
7565: ARRAY
7566: PUSH
7567: LD_INT 5
7569: ARRAY
7570: ST_TO_ADDR
// vc_chassis := list [ i ] [ 1 ] ;
7571: LD_ADDR_OWVAR 37
7575: PUSH
7576: LD_VAR 0 1
7580: PUSH
7581: LD_VAR 0 3
7585: ARRAY
7586: PUSH
7587: LD_INT 1
7589: ARRAY
7590: ST_TO_ADDR
// vc_control := list [ i ] [ 2 ] ;
7591: LD_ADDR_OWVAR 38
7595: PUSH
7596: LD_VAR 0 1
7600: PUSH
7601: LD_VAR 0 3
7605: ARRAY
7606: PUSH
7607: LD_INT 2
7609: ARRAY
7610: ST_TO_ADDR
// vc_engine := list [ i ] [ 3 ] ;
7611: LD_ADDR_OWVAR 39
7615: PUSH
7616: LD_VAR 0 1
7620: PUSH
7621: LD_VAR 0 3
7625: ARRAY
7626: PUSH
7627: LD_INT 3
7629: ARRAY
7630: ST_TO_ADDR
// vc_weapon := list [ i ] [ 4 ] ;
7631: LD_ADDR_OWVAR 40
7635: PUSH
7636: LD_VAR 0 1
7640: PUSH
7641: LD_VAR 0 3
7645: ARRAY
7646: PUSH
7647: LD_INT 4
7649: ARRAY
7650: ST_TO_ADDR
// vc_fuel_battery := rand ( 1 , 4 ) ;
7651: LD_ADDR_OWVAR 41
7655: PUSH
7656: LD_INT 1
7658: PPUSH
7659: LD_INT 4
7661: PPUSH
7662: CALL_OW 12
7666: ST_TO_ADDR
// PlaceUnitArea ( CreateVehicle ( ) , _PlayerEnter , false ) ;
7667: CALL_OW 45
7671: PPUSH
7672: LD_INT 1
7674: PPUSH
7675: LD_INT 0
7677: PPUSH
7678: CALL_OW 49
// end ;
7682: GO 7538
7684: POP
7685: POP
// end ;
7686: LD_VAR 0 2
7690: RET
// export function SeeAnyFromList ( side , list ) ; var i , SeeAny ; begin
7691: LD_INT 0
7693: PPUSH
7694: PPUSH
7695: PPUSH
// SeeAny := false ;
7696: LD_ADDR_VAR 0 5
7700: PUSH
7701: LD_INT 0
7703: ST_TO_ADDR
// for i in list do
7704: LD_ADDR_VAR 0 4
7708: PUSH
7709: LD_VAR 0 2
7713: PUSH
7714: FOR_IN
7715: IFFALSE 7743
// if See ( side , i ) then
7717: LD_VAR 0 1
7721: PPUSH
7722: LD_VAR 0 4
7726: PPUSH
7727: CALL_OW 292
7731: IFFALSE 7741
// SeeAny := true ;
7733: LD_ADDR_VAR 0 5
7737: PUSH
7738: LD_INT 1
7740: ST_TO_ADDR
7741: GO 7714
7743: POP
7744: POP
// result := SeeAny ;
7745: LD_ADDR_VAR 0 3
7749: PUSH
7750: LD_VAR 0 5
7754: ST_TO_ADDR
// end ;
7755: LD_VAR 0 3
7759: RET
// export function WhoDoISee ( side , list ) ; var i ; begin
7760: LD_INT 0
7762: PPUSH
7763: PPUSH
// for i in list do
7764: LD_ADDR_VAR 0 4
7768: PUSH
7769: LD_VAR 0 2
7773: PUSH
7774: FOR_IN
7775: IFFALSE 7805
// if See ( side , i ) then
7777: LD_VAR 0 1
7781: PPUSH
7782: LD_VAR 0 4
7786: PPUSH
7787: CALL_OW 292
7791: IFFALSE 7803
// result := i ;
7793: LD_ADDR_VAR 0 3
7797: PUSH
7798: LD_VAR 0 4
7802: ST_TO_ADDR
7803: GO 7774
7805: POP
7806: POP
// end ;
7807: LD_VAR 0 3
7811: RET
// export function NearestUnitToArea ( list , area ) ; var i , n ; begin
7812: LD_INT 0
7814: PPUSH
7815: PPUSH
7816: PPUSH
// n := [ ] ;
7817: LD_ADDR_VAR 0 5
7821: PUSH
7822: EMPTY
7823: ST_TO_ADDR
// for i := 1 to list do
7824: LD_ADDR_VAR 0 4
7828: PUSH
7829: DOUBLE
7830: LD_INT 1
7832: DEC
7833: ST_TO_ADDR
7834: LD_VAR 0 1
7838: PUSH
7839: FOR_TO
7840: IFFALSE 7937
// begin if not ( n = 0 ) then
7842: LD_VAR 0 5
7846: PUSH
7847: LD_INT 0
7849: EQUAL
7850: NOT
7851: IFFALSE 7909
// begin if n > GetDistUnitArea ( list [ i ] , area ) then
7853: LD_VAR 0 5
7857: PUSH
7858: LD_VAR 0 1
7862: PUSH
7863: LD_VAR 0 4
7867: ARRAY
7868: PPUSH
7869: LD_VAR 0 2
7873: PPUSH
7874: CALL_OW 299
7878: GREATER
7879: IFFALSE 7907
// n := GetDistUnitArea ( list [ i ] , area ) ;
7881: LD_ADDR_VAR 0 5
7885: PUSH
7886: LD_VAR 0 1
7890: PUSH
7891: LD_VAR 0 4
7895: ARRAY
7896: PPUSH
7897: LD_VAR 0 2
7901: PPUSH
7902: CALL_OW 299
7906: ST_TO_ADDR
// end else
7907: GO 7935
// begin n := GetDistUnitArea ( list [ i ] , area ) ;
7909: LD_ADDR_VAR 0 5
7913: PUSH
7914: LD_VAR 0 1
7918: PUSH
7919: LD_VAR 0 4
7923: ARRAY
7924: PPUSH
7925: LD_VAR 0 2
7929: PPUSH
7930: CALL_OW 299
7934: ST_TO_ADDR
// end ; end ;
7935: GO 7839
7937: POP
7938: POP
// for i := 1 to list do
7939: LD_ADDR_VAR 0 4
7943: PUSH
7944: DOUBLE
7945: LD_INT 1
7947: DEC
7948: ST_TO_ADDR
7949: LD_VAR 0 1
7953: PUSH
7954: FOR_TO
7955: IFFALSE 8005
// begin if GetDistUnitArea ( list [ i ] , area ) = n then
7957: LD_VAR 0 1
7961: PUSH
7962: LD_VAR 0 4
7966: ARRAY
7967: PPUSH
7968: LD_VAR 0 2
7972: PPUSH
7973: CALL_OW 299
7977: PUSH
7978: LD_VAR 0 5
7982: EQUAL
7983: IFFALSE 8003
// begin result := list [ i ] ;
7985: LD_ADDR_VAR 0 3
7989: PUSH
7990: LD_VAR 0 1
7994: PUSH
7995: LD_VAR 0 4
7999: ARRAY
8000: ST_TO_ADDR
// break ;
8001: GO 8005
// end ; end ;
8003: GO 7954
8005: POP
8006: POP
// end ;
8007: LD_VAR 0 3
8011: RET
// export function AreInArea ( list , area ) ; var i , in_area ; begin
8012: LD_INT 0
8014: PPUSH
8015: PPUSH
8016: PPUSH
// in_area := 0 ;
8017: LD_ADDR_VAR 0 5
8021: PUSH
8022: LD_INT 0
8024: ST_TO_ADDR
// for i in list do
8025: LD_ADDR_VAR 0 4
8029: PUSH
8030: LD_VAR 0 1
8034: PUSH
8035: FOR_IN
8036: IFFALSE 8070
// if IsInArea ( i , area ) then
8038: LD_VAR 0 4
8042: PPUSH
8043: LD_VAR 0 2
8047: PPUSH
8048: CALL_OW 308
8052: IFFALSE 8068
// in_area := in_area + 1 ;
8054: LD_ADDR_VAR 0 5
8058: PUSH
8059: LD_VAR 0 5
8063: PUSH
8064: LD_INT 1
8066: PLUS
8067: ST_TO_ADDR
8068: GO 8035
8070: POP
8071: POP
// if in_area = list then
8072: LD_VAR 0 5
8076: PUSH
8077: LD_VAR 0 1
8081: EQUAL
8082: IFFALSE 8094
// result := true else
8084: LD_ADDR_VAR 0 3
8088: PUSH
8089: LD_INT 1
8091: ST_TO_ADDR
8092: GO 8102
// result := false ;
8094: LD_ADDR_VAR 0 3
8098: PUSH
8099: LD_INT 0
8101: ST_TO_ADDR
// end ;
8102: LD_VAR 0 3
8106: RET
// export function Shooting ( side ) ; var un , shoot ; begin
8107: LD_INT 0
8109: PPUSH
8110: PPUSH
8111: PPUSH
// shoot := false ;
8112: LD_ADDR_VAR 0 4
8116: PUSH
8117: LD_INT 0
8119: ST_TO_ADDR
// for un in FilterAllUnits ( [ f_side , side ] ) do
8120: LD_ADDR_VAR 0 3
8124: PUSH
8125: LD_INT 22
8127: PUSH
8128: LD_VAR 0 1
8132: PUSH
8133: EMPTY
8134: LIST
8135: LIST
8136: PPUSH
8137: CALL_OW 69
8141: PUSH
8142: FOR_IN
8143: IFFALSE 8166
// if Attacks ( un ) then
8145: LD_VAR 0 3
8149: PPUSH
8150: CALL_OW 320
8154: IFFALSE 8164
// shoot := true ;
8156: LD_ADDR_VAR 0 4
8160: PUSH
8161: LD_INT 1
8163: ST_TO_ADDR
8164: GO 8142
8166: POP
8167: POP
// result := shoot ;
8168: LD_ADDR_VAR 0 2
8172: PUSH
8173: LD_VAR 0 4
8177: ST_TO_ADDR
// end ;
8178: LD_VAR 0 2
8182: RET
// export function Patrol ( list , wp_move , time ) ; var un , wp_move_back , wps , last_wp ; var hex , x , y ; begin
8183: LD_INT 0
8185: PPUSH
8186: PPUSH
8187: PPUSH
8188: PPUSH
8189: PPUSH
8190: PPUSH
8191: PPUSH
8192: PPUSH
// wp_move_back := TurnArray ( wp_move ) ;
8193: LD_ADDR_VAR 0 6
8197: PUSH
8198: LD_VAR 0 2
8202: PPUSH
8203: CALL 8382 0 1
8207: ST_TO_ADDR
// wps := wp_move ^ wp_move_back ;
8208: LD_ADDR_VAR 0 7
8212: PUSH
8213: LD_VAR 0 2
8217: PUSH
8218: LD_VAR 0 6
8222: ADD
8223: ST_TO_ADDR
// last_wp := ( ( Count ( wps ) - 1 ) div 2 ) ;
8224: LD_ADDR_VAR 0 8
8228: PUSH
8229: LD_VAR 0 7
8233: PPUSH
8234: CALL 8472 0 1
8238: PUSH
8239: LD_INT 1
8241: MINUS
8242: PUSH
8243: LD_INT 2
8245: DIV
8246: ST_TO_ADDR
// for un in list do
8247: LD_ADDR_VAR 0 5
8251: PUSH
8252: LD_VAR 0 1
8256: PUSH
8257: FOR_IN
8258: IFFALSE 8374
// begin for hex in wps do
8260: LD_ADDR_VAR 0 9
8264: PUSH
8265: LD_VAR 0 7
8269: PUSH
8270: FOR_IN
8271: IFFALSE 8370
// begin x := hex [ 1 ] ;
8273: LD_ADDR_VAR 0 10
8277: PUSH
8278: LD_VAR 0 9
8282: PUSH
8283: LD_INT 1
8285: ARRAY
8286: ST_TO_ADDR
// y := hex [ 2 ] ;
8287: LD_ADDR_VAR 0 11
8291: PUSH
8292: LD_VAR 0 9
8296: PUSH
8297: LD_INT 2
8299: ARRAY
8300: ST_TO_ADDR
// AddComAgressiveMove ( un , x , y ) ;
8301: LD_VAR 0 5
8305: PPUSH
8306: LD_VAR 0 10
8310: PPUSH
8311: LD_VAR 0 11
8315: PPUSH
8316: CALL_OW 174
// if hex = wps [ 1 ] or hex = wps [ last_wp ] then
8320: LD_VAR 0 9
8324: PUSH
8325: LD_VAR 0 7
8329: PUSH
8330: LD_INT 1
8332: ARRAY
8333: EQUAL
8334: PUSH
8335: LD_VAR 0 9
8339: PUSH
8340: LD_VAR 0 7
8344: PUSH
8345: LD_VAR 0 8
8349: ARRAY
8350: EQUAL
8351: OR
8352: IFFALSE 8368
// begin AddComWait ( un , time ) ;
8354: LD_VAR 0 5
8358: PPUSH
8359: LD_VAR 0 3
8363: PPUSH
8364: CALL_OW 202
// end ; end ;
8368: GO 8270
8370: POP
8371: POP
// end ;
8372: GO 8257
8374: POP
8375: POP
// enable ;
8376: ENABLE
// end ;
8377: LD_VAR 0 4
8381: RET
// export function TurnArray ( arr ) ; var i , novy ; begin
8382: LD_INT 0
8384: PPUSH
8385: PPUSH
8386: PPUSH
// novy := [ ] ;
8387: LD_ADDR_VAR 0 4
8391: PUSH
8392: EMPTY
8393: ST_TO_ADDR
// for i := - ( Count ( arr ) - 1 ) to - 1 do
8394: LD_ADDR_VAR 0 3
8398: PUSH
8399: DOUBLE
8400: LD_VAR 0 1
8404: PPUSH
8405: CALL 8472 0 1
8409: PUSH
8410: LD_INT 1
8412: MINUS
8413: NEG
8414: DEC
8415: ST_TO_ADDR
8416: LD_INT 1
8418: NEG
8419: PUSH
8420: FOR_TO
8421: IFFALSE 8455
// novy := novy ^ [ arr [ i * ( - 1 ) ] ] ;
8423: LD_ADDR_VAR 0 4
8427: PUSH
8428: LD_VAR 0 4
8432: PUSH
8433: LD_VAR 0 1
8437: PUSH
8438: LD_VAR 0 3
8442: PUSH
8443: LD_INT 1
8445: NEG
8446: MUL
8447: ARRAY
8448: PUSH
8449: EMPTY
8450: LIST
8451: ADD
8452: ST_TO_ADDR
8453: GO 8420
8455: POP
8456: POP
// result := novy ;
8457: LD_ADDR_VAR 0 2
8461: PUSH
8462: LD_VAR 0 4
8466: ST_TO_ADDR
// end ;
8467: LD_VAR 0 2
8471: RET
// export function Count ( arr ) ; var i , x ; begin
8472: LD_INT 0
8474: PPUSH
8475: PPUSH
8476: PPUSH
// for i := 1 to arr do
8477: LD_ADDR_VAR 0 3
8481: PUSH
8482: DOUBLE
8483: LD_INT 1
8485: DEC
8486: ST_TO_ADDR
8487: LD_VAR 0 1
8491: PUSH
8492: FOR_TO
8493: IFFALSE 8497
// begin end ;
8495: GO 8492
8497: POP
8498: POP
// result := i ;
8499: LD_ADDR_VAR 0 2
8503: PUSH
8504: LD_VAR 0 3
8508: ST_TO_ADDR
// end ;
8509: LD_VAR 0 2
8513: RET
// export function AreAlive ( list ) ; var i , are_alive , driver ; begin
8514: LD_INT 0
8516: PPUSH
8517: PPUSH
8518: PPUSH
8519: PPUSH
// driver := [ ] ;
8520: LD_ADDR_VAR 0 5
8524: PUSH
8525: EMPTY
8526: ST_TO_ADDR
// are_alive := false ;
8527: LD_ADDR_VAR 0 4
8531: PUSH
8532: LD_INT 0
8534: ST_TO_ADDR
// for i in list do
8535: LD_ADDR_VAR 0 3
8539: PUSH
8540: LD_VAR 0 1
8544: PUSH
8545: FOR_IN
8546: IFFALSE 8660
// begin if GetType ( i ) = 1 and GetLives ( i ) > 0 then
8548: LD_VAR 0 3
8552: PPUSH
8553: CALL_OW 247
8557: PUSH
8558: LD_INT 1
8560: EQUAL
8561: PUSH
8562: LD_VAR 0 3
8566: PPUSH
8567: CALL_OW 256
8571: PUSH
8572: LD_INT 0
8574: GREATER
8575: AND
8576: IFFALSE 8586
// are_alive := true ;
8578: LD_ADDR_VAR 0 4
8582: PUSH
8583: LD_INT 1
8585: ST_TO_ADDR
// if GetType ( i ) = unit_vehicle then
8586: LD_VAR 0 3
8590: PPUSH
8591: CALL_OW 247
8595: PUSH
8596: LD_INT 2
8598: EQUAL
8599: IFFALSE 8658
// begin if GetClass ( i ) = class_mechanic then
8601: LD_VAR 0 3
8605: PPUSH
8606: CALL_OW 257
8610: PUSH
8611: LD_INT 3
8613: EQUAL
8614: IFFALSE 8635
// driver := driver ^ [ i ] ;
8616: LD_ADDR_VAR 0 5
8620: PUSH
8621: LD_VAR 0 5
8625: PUSH
8626: LD_VAR 0 3
8630: PUSH
8631: EMPTY
8632: LIST
8633: ADD
8634: ST_TO_ADDR
// if GetLives ( driver ) > 0 then
8635: LD_VAR 0 5
8639: PPUSH
8640: CALL_OW 256
8644: PUSH
8645: LD_INT 0
8647: GREATER
8648: IFFALSE 8658
// are_alive := true ;
8650: LD_ADDR_VAR 0 4
8654: PUSH
8655: LD_INT 1
8657: ST_TO_ADDR
// end ; end ;
8658: GO 8545
8660: POP
8661: POP
// result := are_alive ;
8662: LD_ADDR_VAR 0 2
8666: PUSH
8667: LD_VAR 0 4
8671: ST_TO_ADDR
// end ;
8672: LD_VAR 0 2
8676: RET
// export function FollowUnit ( un , list ) ; var i , near_un , dist , dist2 , dist3 ; var x , y , dir , px , py ; begin
8677: LD_INT 0
8679: PPUSH
8680: PPUSH
8681: PPUSH
8682: PPUSH
8683: PPUSH
8684: PPUSH
8685: PPUSH
8686: PPUSH
8687: PPUSH
8688: PPUSH
8689: PPUSH
// near_un := NearestUnitToUnit ( list , un ) ;
8690: LD_ADDR_VAR 0 5
8694: PUSH
8695: LD_VAR 0 2
8699: PPUSH
8700: LD_VAR 0 1
8704: PPUSH
8705: CALL_OW 74
8709: ST_TO_ADDR
// for i in list do
8710: LD_ADDR_VAR 0 4
8714: PUSH
8715: LD_VAR 0 2
8719: PUSH
8720: FOR_IN
8721: IFFALSE 8756
// begin if not IsOk ( i ) then
8723: LD_VAR 0 4
8727: PPUSH
8728: CALL_OW 302
8732: NOT
8733: IFFALSE 8754
// begin near_un := near_un diff [ i ] ;
8735: LD_ADDR_VAR 0 5
8739: PUSH
8740: LD_VAR 0 5
8744: PUSH
8745: LD_VAR 0 4
8749: PUSH
8750: EMPTY
8751: LIST
8752: DIFF
8753: ST_TO_ADDR
// end ; end ;
8754: GO 8720
8756: POP
8757: POP
// dist = GetDistUnits ( un , near_un ) ;
8758: LD_ADDR_VAR 0 6
8762: PUSH
8763: LD_VAR 0 1
8767: PPUSH
8768: LD_VAR 0 5
8772: PPUSH
8773: CALL_OW 296
8777: ST_TO_ADDR
// x = GetX ( near_un ) ;
8778: LD_ADDR_VAR 0 9
8782: PUSH
8783: LD_VAR 0 5
8787: PPUSH
8788: CALL_OW 250
8792: ST_TO_ADDR
// y = GetY ( near_un ) ;
8793: LD_ADDR_VAR 0 10
8797: PUSH
8798: LD_VAR 0 5
8802: PPUSH
8803: CALL_OW 251
8807: ST_TO_ADDR
// dist2 = [ ] ;
8808: LD_ADDR_VAR 0 7
8812: PUSH
8813: EMPTY
8814: ST_TO_ADDR
// dist3 = [ ] ;
8815: LD_ADDR_VAR 0 8
8819: PUSH
8820: EMPTY
8821: ST_TO_ADDR
// if dist >= 3 then
8822: LD_VAR 0 6
8826: PUSH
8827: LD_INT 3
8829: GREATEREQUAL
8830: IFFALSE 9035
// begin for dir = 0 to 5 do
8832: LD_ADDR_VAR 0 11
8836: PUSH
8837: DOUBLE
8838: LD_INT 0
8840: DEC
8841: ST_TO_ADDR
8842: LD_INT 5
8844: PUSH
8845: FOR_TO
8846: IFFALSE 8986
// begin px = ShiftX ( x , dir , dist - 2 ) ;
8848: LD_ADDR_VAR 0 12
8852: PUSH
8853: LD_VAR 0 9
8857: PPUSH
8858: LD_VAR 0 11
8862: PPUSH
8863: LD_VAR 0 6
8867: PUSH
8868: LD_INT 2
8870: MINUS
8871: PPUSH
8872: CALL_OW 272
8876: ST_TO_ADDR
// py = ShiftY ( y , dir , dist - 2 ) ;
8877: LD_ADDR_VAR 0 13
8881: PUSH
8882: LD_VAR 0 10
8886: PPUSH
8887: LD_VAR 0 11
8891: PPUSH
8892: LD_VAR 0 6
8896: PUSH
8897: LD_INT 2
8899: MINUS
8900: PPUSH
8901: CALL_OW 273
8905: ST_TO_ADDR
// if ValidHex ( px , py ) then
8906: LD_VAR 0 12
8910: PPUSH
8911: LD_VAR 0 13
8915: PPUSH
8916: CALL_OW 488
8920: IFFALSE 8984
// begin dist2 = dist2 ^ [ [ px , py ] ] ;
8922: LD_ADDR_VAR 0 7
8926: PUSH
8927: LD_VAR 0 7
8931: PUSH
8932: LD_VAR 0 12
8936: PUSH
8937: LD_VAR 0 13
8941: PUSH
8942: EMPTY
8943: LIST
8944: LIST
8945: PUSH
8946: EMPTY
8947: LIST
8948: ADD
8949: ST_TO_ADDR
// dist3 = dist3 ^ [ GetDistUnitXY ( un , px , py ) ] ;
8950: LD_ADDR_VAR 0 8
8954: PUSH
8955: LD_VAR 0 8
8959: PUSH
8960: LD_VAR 0 1
8964: PPUSH
8965: LD_VAR 0 12
8969: PPUSH
8970: LD_VAR 0 13
8974: PPUSH
8975: CALL_OW 297
8979: PUSH
8980: EMPTY
8981: LIST
8982: ADD
8983: ST_TO_ADDR
// end end ;
8984: GO 8845
8986: POP
8987: POP
// dist = BestFromListByList ( dist2 , dist3 ) ;
8988: LD_ADDR_VAR 0 6
8992: PUSH
8993: LD_VAR 0 7
8997: PPUSH
8998: LD_VAR 0 8
9002: PPUSH
9003: CALL_OW 79
9007: ST_TO_ADDR
// ComMoveXY ( un , dist [ 1 ] , dist [ 2 ] ) ;
9008: LD_VAR 0 1
9012: PPUSH
9013: LD_VAR 0 6
9017: PUSH
9018: LD_INT 1
9020: ARRAY
9021: PPUSH
9022: LD_VAR 0 6
9026: PUSH
9027: LD_INT 2
9029: ARRAY
9030: PPUSH
9031: CALL_OW 111
// end ; end ; end_of_file
9035: LD_VAR 0 3
9039: RET
// export function ApesOnTheMap ( ) ; var i , ape ; begin
9040: LD_INT 0
9042: PPUSH
9043: PPUSH
9044: PPUSH
// for i := 1 to diff_ApesCount do
9045: LD_ADDR_VAR 0 2
9049: PUSH
9050: DOUBLE
9051: LD_INT 1
9053: DEC
9054: ST_TO_ADDR
9055: LD_EXP 18
9059: PUSH
9060: FOR_TO
9061: IFFALSE 9109
// begin ape := CreateNewApeman ( ) ;
9063: LD_ADDR_VAR 0 3
9067: PUSH
9068: CALL 9116 0 0
9072: ST_TO_ADDR
// PlaceUnitArea ( ape , _ApesForest , false ) ;
9073: LD_VAR 0 3
9077: PPUSH
9078: LD_INT 3
9080: PPUSH
9081: LD_INT 0
9083: PPUSH
9084: CALL_OW 49
// group_Apes := group_Apes ^ [ ape ] ;
9088: LD_ADDR_EXP 9
9092: PUSH
9093: LD_EXP 9
9097: PUSH
9098: LD_VAR 0 3
9102: PUSH
9103: EMPTY
9104: LIST
9105: ADD
9106: ST_TO_ADDR
// end ;
9107: GO 9060
9109: POP
9110: POP
// end ;
9111: LD_VAR 0 1
9115: RET
// function CreateNewApeman ( ) ; begin
9116: LD_INT 0
9118: PPUSH
// uc_side := side_nature ;
9119: LD_ADDR_OWVAR 20
9123: PUSH
9124: LD_EXP 1
9128: ST_TO_ADDR
// uc_nation := nation_nature ;
9129: LD_ADDR_OWVAR 21
9133: PUSH
9134: LD_INT 0
9136: ST_TO_ADDR
// InitHc ( ) ;
9137: CALL_OW 19
// hc_class := class_apeman ;
9141: LD_ADDR_OWVAR 28
9145: PUSH
9146: LD_INT 12
9148: ST_TO_ADDR
// hc_agressivity := diff_ApesAgressivity ;
9149: LD_ADDR_OWVAR 35
9153: PUSH
9154: LD_EXP 19
9158: ST_TO_ADDR
// result := CreateHuman ( ) ;
9159: LD_ADDR_VAR 0 1
9163: PUSH
9164: CALL_OW 44
9168: ST_TO_ADDR
// end ;
9169: LD_VAR 0 1
9173: RET
// every 0 0$1 do var un , ape , hex ; var ApesAll , near_cave ;
9174: GO 9176
9176: DISABLE
9177: LD_INT 0
9179: PPUSH
9180: PPUSH
9181: PPUSH
9182: PPUSH
9183: PPUSH
// begin ApesAll := FilterAllUnits ( [ f_class , class_apeman ] ) ;
9184: LD_ADDR_VAR 0 4
9188: PUSH
9189: LD_INT 25
9191: PUSH
9192: LD_INT 12
9194: PUSH
9195: EMPTY
9196: LIST
9197: LIST
9198: PPUSH
9199: CALL_OW 69
9203: ST_TO_ADDR
// near_cave := FilterUnitsInArea ( _ApesCaveEnter , [ f_class , class_apeman ] ) ;
9204: LD_ADDR_VAR 0 5
9208: PUSH
9209: LD_INT 6
9211: PPUSH
9212: LD_INT 25
9214: PUSH
9215: LD_INT 12
9217: PUSH
9218: EMPTY
9219: LIST
9220: LIST
9221: PPUSH
9222: CALL_OW 70
9226: ST_TO_ADDR
// for un in group_Apes do
9227: LD_ADDR_VAR 0 1
9231: PUSH
9232: LD_EXP 9
9236: PUSH
9237: FOR_IN
9238: IFFALSE 9306
// begin if IsInArea ( un , _ApesForestBorder ) then
9240: LD_VAR 0 1
9244: PPUSH
9245: LD_INT 4
9247: PPUSH
9248: CALL_OW 308
9252: IFFALSE 9277
// if IsOk ( un ) then
9254: LD_VAR 0 1
9258: PPUSH
9259: CALL_OW 302
9263: IFFALSE 9277
// ComMoveToArea ( un , _ApesForestGate ) ;
9265: LD_VAR 0 1
9269: PPUSH
9270: LD_INT 5
9272: PPUSH
9273: CALL_OW 113
// if GetLives ( un ) <= 750 then
9277: LD_VAR 0 1
9281: PPUSH
9282: CALL_OW 256
9286: PUSH
9287: LD_INT 750
9289: LESSEQUAL
9290: IFFALSE 9304
// ComMoveToArea ( un , _ApesCaveEnter ) ;
9292: LD_VAR 0 1
9296: PPUSH
9297: LD_INT 6
9299: PPUSH
9300: CALL_OW 113
// end ;
9304: GO 9237
9306: POP
9307: POP
// if near_cave > 0 then
9308: LD_VAR 0 5
9312: PUSH
9313: LD_INT 0
9315: GREATER
9316: IFFALSE 9344
// for un in near_cave do
9318: LD_ADDR_VAR 0 1
9322: PUSH
9323: LD_VAR 0 5
9327: PUSH
9328: FOR_IN
9329: IFFALSE 9342
// RemoveUnit ( un ) ;
9331: LD_VAR 0 1
9335: PPUSH
9336: CALL_OW 64
9340: GO 9328
9342: POP
9343: POP
// if ApesAll < diff_ApesCount and ApesKilled < ApesKilledMax then
9344: LD_VAR 0 4
9348: PUSH
9349: LD_EXP 18
9353: LESS
9354: PUSH
9355: LD_EXP 36
9359: PUSH
9360: LD_EXP 37
9364: LESS
9365: AND
9366: IFFALSE 9497
// begin hex := RandHexArea ( _ApesForest , false ) ;
9368: LD_ADDR_VAR 0 3
9372: PUSH
9373: LD_INT 3
9375: PPUSH
9376: LD_INT 0
9378: PPUSH
9379: CALL_OW 16
9383: ST_TO_ADDR
// ape := CreateNewApeman ( ) ;
9384: LD_ADDR_VAR 0 2
9388: PUSH
9389: CALL 9116 0 0
9393: ST_TO_ADDR
// wait ( [ 0 0$3 , 0 0$4 , 0 0$5 ] [ rand ( 1 , 3 ) ] ) ;
9394: LD_INT 105
9396: PUSH
9397: LD_INT 140
9399: PUSH
9400: LD_INT 175
9402: PUSH
9403: EMPTY
9404: LIST
9405: LIST
9406: LIST
9407: PUSH
9408: LD_INT 1
9410: PPUSH
9411: LD_INT 3
9413: PPUSH
9414: CALL_OW 12
9418: ARRAY
9419: PPUSH
9420: CALL_OW 67
// PlaceUnitArea ( ape , _ApesCaveExit , false ) ;
9424: LD_VAR 0 2
9428: PPUSH
9429: LD_INT 7
9431: PPUSH
9432: LD_INT 0
9434: PPUSH
9435: CALL_OW 49
// SetDir ( ape , 2 ) ;
9439: LD_VAR 0 2
9443: PPUSH
9444: LD_INT 2
9446: PPUSH
9447: CALL_OW 233
// ComMoveXY ( ape , hex [ 1 ] , hex [ 2 ] ) ;
9451: LD_VAR 0 2
9455: PPUSH
9456: LD_VAR 0 3
9460: PUSH
9461: LD_INT 1
9463: ARRAY
9464: PPUSH
9465: LD_VAR 0 3
9469: PUSH
9470: LD_INT 2
9472: ARRAY
9473: PPUSH
9474: CALL_OW 111
// group_Apes := group_Apes ^ [ ape ] ;
9478: LD_ADDR_EXP 9
9482: PUSH
9483: LD_EXP 9
9487: PUSH
9488: LD_VAR 0 2
9492: PUSH
9493: EMPTY
9494: LIST
9495: ADD
9496: ST_TO_ADDR
// end ; enable ;
9497: ENABLE
// end ; end_of_file
9498: PPOPN 5
9500: END
// every 0 0$3 trigger AreInArea ( FilterAllUnits ( [ [ f_side , side_player ] , [ f_type , unit_human ] ] ) , _PlayerExit ) do var q , q2 ;
9501: LD_INT 22
9503: PUSH
9504: LD_EXP 2
9508: PUSH
9509: EMPTY
9510: LIST
9511: LIST
9512: PUSH
9513: LD_INT 21
9515: PUSH
9516: LD_INT 1
9518: PUSH
9519: EMPTY
9520: LIST
9521: LIST
9522: PUSH
9523: EMPTY
9524: LIST
9525: LIST
9526: PPUSH
9527: CALL_OW 69
9531: PPUSH
9532: LD_INT 2
9534: PPUSH
9535: CALL 8012 0 2
9539: IFFALSE 9676
9541: GO 9543
9543: DISABLE
9544: LD_INT 0
9546: PPUSH
9547: PPUSH
// begin if GetSide ( Bowl ) <> side_player and IsOk ( Bowl ) then
9548: LD_EXP 34
9552: PPUSH
9553: CALL_OW 255
9557: PUSH
9558: LD_EXP 2
9562: NONEQUAL
9563: PUSH
9564: LD_EXP 34
9568: PPUSH
9569: CALL_OW 302
9573: AND
9574: IFFALSE 9623
// begin q := Query ( QEnd1 ) ;
9576: LD_ADDR_VAR 0 1
9580: PUSH
9581: LD_STRING QEnd1
9583: PPUSH
9584: CALL_OW 97
9588: ST_TO_ADDR
// case q of 1 :
9589: LD_VAR 0 1
9593: PUSH
9594: LD_INT 1
9596: DOUBLE
9597: EQUAL
9598: IFTRUE 9602
9600: GO 9609
9602: POP
// begin Victory ( ) ;
9603: CALL 9679 0 0
// end ; 2 :
9607: GO 9621
9609: LD_INT 2
9611: DOUBLE
9612: EQUAL
9613: IFTRUE 9617
9615: GO 9620
9617: POP
// begin end ; end ;
9618: GO 9621
9620: POP
// end else
9621: GO 9675
// begin q2 := Query ( QEnd2 ) ;
9623: LD_ADDR_VAR 0 2
9627: PUSH
9628: LD_STRING QEnd2
9630: PPUSH
9631: CALL_OW 97
9635: ST_TO_ADDR
// case q of 1 :
9636: LD_VAR 0 1
9640: PUSH
9641: LD_INT 1
9643: DOUBLE
9644: EQUAL
9645: IFTRUE 9649
9647: GO 9656
9649: POP
// Victory ( ) ; 2 :
9650: CALL 9679 0 0
9654: GO 9675
9656: LD_INT 2
9658: DOUBLE
9659: EQUAL
9660: IFTRUE 9664
9662: GO 9674
9664: POP
// wait ( 0 0$5 ) ; end ;
9665: LD_INT 175
9667: PPUSH
9668: CALL_OW 67
9672: GO 9675
9674: POP
// end ; enable ;
9675: ENABLE
// end ;
9676: PPOPN 2
9678: END
// function Victory ( ) ; var un ; begin
9679: LD_INT 0
9681: PPUSH
9682: PPUSH
// if PowsSaved then
9683: LD_EXP 46
9687: IFFALSE 9701
// AddMedal ( medal1 , 1 ) else
9689: LD_STRING medal1
9691: PPUSH
9692: LD_INT 1
9694: PPUSH
9695: CALL_OW 101
9699: GO 9712
// AddMedal ( medal1 , - 1 ) ;
9701: LD_STRING medal1
9703: PPUSH
9704: LD_INT 1
9706: NEG
9707: PPUSH
9708: CALL_OW 101
// if hovercraft_count <= 0 then
9712: LD_EXP 47
9716: PUSH
9717: LD_INT 0
9719: LESSEQUAL
9720: IFFALSE 9735
// AddMedal ( medal2 , - 1 ) else
9722: LD_STRING medal2
9724: PPUSH
9725: LD_INT 1
9727: NEG
9728: PPUSH
9729: CALL_OW 101
9733: GO 9767
// if hovercraft_count = 1 then
9735: LD_EXP 47
9739: PUSH
9740: LD_INT 1
9742: EQUAL
9743: IFFALSE 9757
// AddMedal ( medal2 , 2 ) else
9745: LD_STRING medal2
9747: PPUSH
9748: LD_INT 2
9750: PPUSH
9751: CALL_OW 101
9755: GO 9767
// AddMedal ( medal2 , 1 ) ;
9757: LD_STRING medal2
9759: PPUSH
9760: LD_INT 1
9762: PPUSH
9763: CALL_OW 101
// if losses <= 0 then
9767: LD_EXP 44
9771: PUSH
9772: LD_INT 0
9774: LESSEQUAL
9775: IFFALSE 9789
// AddMedal ( medal3 , 1 ) else
9777: LD_STRING medal3
9779: PPUSH
9780: LD_INT 1
9782: PPUSH
9783: CALL_OW 101
9787: GO 9832
// if ( losses < 3 and losses > 0 ) then
9789: LD_EXP 44
9793: PUSH
9794: LD_INT 3
9796: LESS
9797: PUSH
9798: LD_EXP 44
9802: PUSH
9803: LD_INT 0
9805: GREATER
9806: AND
9807: IFFALSE 9821
// AddMedal ( medal3 , 2 ) else
9809: LD_STRING medal3
9811: PPUSH
9812: LD_INT 2
9814: PPUSH
9815: CALL_OW 101
9819: GO 9832
// AddMedal ( medal3 , - 1 ) ;
9821: LD_STRING medal3
9823: PPUSH
9824: LD_INT 1
9826: NEG
9827: PPUSH
9828: CALL_OW 101
// GiveMedals ( Main ) ;
9832: LD_STRING Main
9834: PPUSH
9835: CALL_OW 102
// for un in group_Pows do
9839: LD_ADDR_VAR 0 2
9843: PUSH
9844: LD_EXP 7
9848: PUSH
9849: FOR_IN
9850: IFFALSE 9890
// if GetSide ( un ) = side_player then
9852: LD_VAR 0 2
9856: PPUSH
9857: CALL_OW 255
9861: PUSH
9862: LD_EXP 2
9866: EQUAL
9867: IFFALSE 9888
// group_Heike := group_Heike ^ [ un ] ;
9869: LD_ADDR_EXP 6
9873: PUSH
9874: LD_EXP 6
9878: PUSH
9879: LD_VAR 0 2
9883: PUSH
9884: EMPTY
9885: LIST
9886: ADD
9887: ST_TO_ADDR
9888: GO 9849
9890: POP
9891: POP
// RewardPeople ( group_Heike ) ;
9892: LD_EXP 6
9896: PPUSH
9897: CALL_OW 43
// if SolPow_researched then
9901: LD_EXP 48
9905: IFFALSE 9919
// SaveVariable ( SolPow_researched , SolPow_m02 ) ;
9907: LD_EXP 48
9911: PPUSH
9912: LD_STRING SolPow_m02
9914: PPUSH
9915: CALL_OW 39
// if SolEng_researched then
9919: LD_EXP 49
9923: IFFALSE 9937
// SaveVariable ( SolEng_researched , SolEng_m02 ) ;
9925: LD_EXP 49
9929: PPUSH
9930: LD_STRING SolEng_m02
9932: PPUSH
9933: CALL_OW 39
// SaveCharacters ( Heike , Heike ) ;
9937: LD_EXP 27
9941: PPUSH
9942: LD_STRING Heike
9944: PPUSH
9945: CALL_OW 38
// SaveCharacters ( Harwood , Harwood ) ;
9949: LD_EXP 28
9953: PPUSH
9954: LD_STRING Harwood
9956: PPUSH
9957: CALL_OW 38
// SaveCharacters ( Rozier , Rozier ) ;
9961: LD_EXP 29
9965: PPUSH
9966: LD_STRING Rozier
9968: PPUSH
9969: CALL_OW 38
// SaveCharacters ( Vonberg , Vonberg ) ;
9973: LD_EXP 31
9977: PPUSH
9978: LD_STRING Vonberg
9980: PPUSH
9981: CALL_OW 38
// SaveCharacters ( Messer , Messer ) ;
9985: LD_EXP 32
9989: PPUSH
9990: LD_STRING Messer
9992: PPUSH
9993: CALL_OW 38
// SaveCharacters ( Sawyer , Sawyer ) ;
9997: LD_EXP 30
10001: PPUSH
10002: LD_STRING Sawyer
10004: PPUSH
10005: CALL_OW 38
// SaveCharacters ( Bowl , Bowl ) ;
10009: LD_EXP 34
10013: PPUSH
10014: LD_STRING Bowl
10016: PPUSH
10017: CALL_OW 38
// if ( group_Pows diff Bowl ) <> 0 then
10021: LD_EXP 7
10025: PUSH
10026: LD_EXP 34
10030: DIFF
10031: PUSH
10032: LD_INT 0
10034: NONEQUAL
10035: IFFALSE 10055
// SaveCharacters ( group_Pows diff Bowl , otherArabs_m02 ) ;
10037: LD_EXP 7
10041: PUSH
10042: LD_EXP 34
10046: DIFF
10047: PPUSH
10048: LD_STRING otherArabs_m02
10050: PPUSH
10051: CALL_OW 38
// YouWin ( ) ;
10055: CALL_OW 103
// end ;
10059: LD_VAR 0 1
10063: RET
// on UnitDestroyed ( un ) do begin if un = Heike then
10064: LD_VAR 0 1
10068: PUSH
10069: LD_EXP 27
10073: EQUAL
10074: IFFALSE 10083
// MissionFailed ( 1 ) ;
10076: LD_INT 1
10078: PPUSH
10079: CALL 10275 0 1
// if UnitFilter ( un , [ f_class , class_apeman ] ) then
10083: LD_VAR 0 1
10087: PPUSH
10088: LD_INT 25
10090: PUSH
10091: LD_INT 12
10093: PUSH
10094: EMPTY
10095: LIST
10096: LIST
10097: PPUSH
10098: CALL_OW 72
10102: IFFALSE 10118
// ApesKilled := ApesKilled + 1 ;
10104: LD_ADDR_EXP 36
10108: PUSH
10109: LD_EXP 36
10113: PUSH
10114: LD_INT 1
10116: PLUS
10117: ST_TO_ADDR
// if UnitFIlter ( un , [ [ f_side , side_player ] , [ f_type , unit_human ] ] ) then
10118: LD_VAR 0 1
10122: PPUSH
10123: LD_INT 22
10125: PUSH
10126: LD_EXP 2
10130: PUSH
10131: EMPTY
10132: LIST
10133: LIST
10134: PUSH
10135: LD_INT 21
10137: PUSH
10138: LD_INT 1
10140: PUSH
10141: EMPTY
10142: LIST
10143: LIST
10144: PUSH
10145: EMPTY
10146: LIST
10147: LIST
10148: PPUSH
10149: CALL_OW 72
10153: IFFALSE 10169
// losses := losses + 1 ;
10155: LD_ADDR_EXP 44
10159: PUSH
10160: LD_EXP 44
10164: PUSH
10165: LD_INT 1
10167: PLUS
10168: ST_TO_ADDR
// end ;
10169: PPOPN 1
10171: END
// every 0 0$0.5 do var i , j , attacker ;
10172: GO 10174
10174: DISABLE
10175: LD_INT 0
10177: PPUSH
10178: PPUSH
10179: PPUSH
// begin for i in FilterAllUnits ( [ f_side , side_player ] ) do
10180: LD_ADDR_VAR 0 1
10184: PUSH
10185: LD_INT 22
10187: PUSH
10188: LD_EXP 2
10192: PUSH
10193: EMPTY
10194: LIST
10195: LIST
10196: PPUSH
10197: CALL_OW 69
10201: PUSH
10202: FOR_IN
10203: IFFALSE 10270
// begin attacker := Attacks ( i ) ;
10205: LD_ADDR_VAR 0 3
10209: PUSH
10210: LD_VAR 0 1
10214: PPUSH
10215: CALL_OW 320
10219: ST_TO_ADDR
// for j in FilterAllUnits ( [ f_side , side_arab ] ) do
10220: LD_ADDR_VAR 0 2
10224: PUSH
10225: LD_INT 22
10227: PUSH
10228: LD_EXP 4
10232: PUSH
10233: EMPTY
10234: LIST
10235: LIST
10236: PPUSH
10237: CALL_OW 69
10241: PUSH
10242: FOR_IN
10243: IFFALSE 10266
// begin if j in attacker then
10245: LD_VAR 0 2
10249: PUSH
10250: LD_VAR 0 3
10254: IN
10255: IFFALSE 10264
// MissionFailed ( 2 ) ;
10257: LD_INT 2
10259: PPUSH
10260: CALL 10275 0 1
// end ;
10264: GO 10242
10266: POP
10267: POP
// end ;
10268: GO 10202
10270: POP
10271: POP
// end ;
10272: PPOPN 3
10274: END
// export function MissionFailed ( typ ) ; begin
10275: LD_INT 0
10277: PPUSH
// case typ of 1 :
10278: LD_VAR 0 1
10282: PUSH
10283: LD_INT 1
10285: DOUBLE
10286: EQUAL
10287: IFTRUE 10291
10289: GO 10301
10291: POP
// YouLost ( mf_Heike_died ) ; 2 :
10292: LD_STRING mf_Heike_died
10294: PPUSH
10295: CALL_OW 104
10299: GO 10320
10301: LD_INT 2
10303: DOUBLE
10304: EQUAL
10305: IFTRUE 10309
10307: GO 10319
10309: POP
// YouLost ( mf_Betrayal ) ; end ;
10310: LD_STRING mf_Betrayal
10312: PPUSH
10313: CALL_OW 104
10317: GO 10320
10319: POP
// end ; end_of_file
10320: LD_VAR 0 2
10324: RET
// every 0 0$1 trigger EDITOR do var time , sec ; var dif ;
10325: LD_EXP 50
10329: IFFALSE 10496
10331: GO 10333
10333: DISABLE
10334: LD_INT 0
10336: PPUSH
10337: PPUSH
10338: PPUSH
// begin sec := ( ( tick mod 1 1$0 ) div 0 0$1 ) ;
10339: LD_ADDR_VAR 0 2
10343: PUSH
10344: LD_OWVAR 1
10348: PUSH
10349: LD_INT 2100
10351: MOD
10352: PUSH
10353: LD_INT 35
10355: DIV
10356: ST_TO_ADDR
// if sec < 10 then
10357: LD_VAR 0 2
10361: PUSH
10362: LD_INT 10
10364: LESS
10365: IFFALSE 10381
// begin sec := ( 0 & sec ) ;
10367: LD_ADDR_VAR 0 2
10371: PUSH
10372: LD_STRING 0
10374: PUSH
10375: LD_VAR 0 2
10379: STR
10380: ST_TO_ADDR
// end ; case Difficulty of 1 :
10381: LD_OWVAR 67
10385: PUSH
10386: LD_INT 1
10388: DOUBLE
10389: EQUAL
10390: IFTRUE 10394
10392: GO 10405
10394: POP
// dif := ^40ff40Dobrodruh ; 2 :
10395: LD_ADDR_VAR 0 3
10399: PUSH
10400: LD_STRING ^40ff40Dobrodruh
10402: ST_TO_ADDR
10403: GO 10444
10405: LD_INT 2
10407: DOUBLE
10408: EQUAL
10409: IFTRUE 10413
10411: GO 10424
10413: POP
// dif := ^80ffffVelitel ; 3 :
10414: LD_ADDR_VAR 0 3
10418: PUSH
10419: LD_STRING ^80ffffVelitel
10421: ST_TO_ADDR
10422: GO 10444
10424: LD_INT 3
10426: DOUBLE
10427: EQUAL
10428: IFTRUE 10432
10430: GO 10443
10432: POP
// dif := ^4040e0Stratg ; end ;
10433: LD_ADDR_VAR 0 3
10437: PUSH
10438: LD_STRING ^4040e0Stratg
10440: ST_TO_ADDR
10441: GO 10444
10443: POP
// time := ( tick div 1 1$0 ) & : & sec ;
10444: LD_ADDR_VAR 0 1
10448: PUSH
10449: LD_OWVAR 1
10453: PUSH
10454: LD_INT 2100
10456: DIV
10457: PUSH
10458: LD_STRING :
10460: STR
10461: PUSH
10462: LD_VAR 0 2
10466: STR
10467: ST_TO_ADDR
// display_strings := [ Obtnost:  & dif , ^e1d010as mise:  & time ] ;
10468: LD_ADDR_OWVAR 47
10472: PUSH
10473: LD_STRING Obtnost: 
10475: PUSH
10476: LD_VAR 0 3
10480: STR
10481: PUSH
10482: LD_STRING ^e1d010as mise: 
10484: PUSH
10485: LD_VAR 0 1
10489: STR
10490: PUSH
10491: EMPTY
10492: LIST
10493: LIST
10494: ST_TO_ADDR
// enable ;
10495: ENABLE
// end ;
10496: PPOPN 3
10498: END
